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是上一次所在的洞的号码。
如果狐狸按照兔子的要求去进洞寻找兔子,有一些洞狐狸是不会进入的,都有哪些洞呢,我们来计算一下。
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;
}
运行结果:
在狐狸1000次寻找兔子的过程中,狐狸进入过的洞用1表示,没进入的用0,我们发现在这个过程中2、4、7、9号洞狐狸始终没有进入过,所以兔子躲在这些洞里是安全的。
关注视频号:杨老师编程小课堂,欣赏更多arduino小作品
欢迎加入知识星球:球球小课堂
(球球自己经营的知识星球,会不定时地分享其学习成果)
以上是关于C++狐狸进洞的主要内容,如果未能解决你的问题,请参考以下文章
此 Canon SDK C++ 代码片段的等效 C# 代码是啥?
我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情