C++狐狸进洞

Posted 和球球一起学编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++狐狸进洞相关的知识,希望对你有一定的参考价值。

围绕着山顶有10个洞,一只狐狸和一只兔子在各自的洞里。狐狸想吃掉兔子。一天,兔子对狐狸说:“你想吃我有一个条件,先把洞从1~10编上号,你从10号洞出发,先到1号洞找我;第二次隔一个洞,第三次隔2个洞找我,以后依次类推,次数不限,若能找到我,你就可以饱餐一顿。不过在没有找到我以前不能停下来。”狐狸满口答应,就开始找了。它从早到晚进了1000次洞,累得昏了过去,也没找到兔子,请问,兔子躲在几号洞里?


解题思路分析:


通过图示我们发现:

狐狸最开始在10号洞可以看作在0号洞;

第一次进入1(0+1)号洞;

第二次隔一个洞,进入3(1+2=3)号洞;

第三次隔两个洞,进入6(3+3=6)号洞;

第四次隔三个洞,进入10(6+4=10)号洞;

第五次隔四个洞,进入5(10+5=15)号洞;

第六次隔五个洞,进入1(5+6=11)号洞;

第七次隔六个洞,进入8(1+7=8)号洞;

第八次隔七个洞,进入6(8+8=16)号洞;

第九次隔八个洞,进入5(6+9=15)号洞;

第十次隔九个洞,进入5(5+10=15)号洞;

……


我们把狐狸所在的洞的号码用n来表示,狐狸进洞的次数用i来表示,

我们发现第i次进洞所在的洞的号码正好是上一次所在的号码n加上i;因为一共有10个洞,所以在n+i大于10时,所在的洞的号码是n+i除以10的余数。


由此我们得到:

第i次进洞所在的洞的号码是:(n+i)%10,这里n是上一次所在的洞的号码。


如果狐狸按照兔子的要求去进洞寻找兔子,有一些洞狐狸是不会进入的,都有哪些洞呢,我们来计算一下。

#include<iostream>#include<cstring>using namespace std;int main(){ int i,a[11],times,number; memset(a,0,sizeof(a)); times=1; number=0; while(times<1000){ number=(number+times)%10; if(number==0) number=10; a[number]=1; times++;  } for(i=1;i<=10;i++){ cout<<a[i]<<" "; } cout<<endl; for(i=1;i<=10;i++){ if(a[i]==0) cout<<i<<" "; } return 0;  }

运行结果:

【C++】狐狸进洞


在狐狸1000次寻找兔子的过程中,狐狸进入过的洞用1表示,没进入的用0,我们发现在这个过程中2、4、7、9号洞狐狸始终没有进入过,所以兔子躲在这些洞里是安全的。



【C++】狐狸进洞

关注视频号:杨老师编程小课堂,欣赏更多arduino小作品

【C++】狐狸进洞

欢迎加入知识星球:球球小课堂

(球球自己经营的知识星球,会不定时地分享其学习成果)





以上是关于C++狐狸进洞的主要内容,如果未能解决你的问题,请参考以下文章

有趣的 C++ 代码片段,有啥解释吗? [复制]

以下代码片段 C++ 的说明

C++ 代码片段执行

此 Canon SDK C++ 代码片段的等效 C# 代码是啥?

C++ 代码片段(积累)

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情