您的位置:首页 > 其它

经典狐狸逮兔子问题

2017-04-01 08:46 489 查看
问题描述:
围绕着山顶有10个圆形排列的洞,狐狸要吃兔子,兔子说:”可以,但必须找到我,我就藏于这10个洞中,你先到1号洞找,第二次隔1个洞(3号洞),第三次隔2个洞(6号洞),以后如此类推,次数不限.”但狐狸从早到晚进进出出了1000,仍没有找到兔子.:兔子究竟藏在哪个洞里?
问题延伸:        
          围绕着山顶有n个圆形排列的洞,玉玉要吃兔子,兔子说:“可以,但必须找到我,我就藏于这1..n个洞中,你先到1号洞找,第二次隔1个洞(即3号洞)找,第三次隔2个洞(即6号洞)找,以后如此类推,次数不限.”但玉玉从早到晚找了m次,仍没有找到兔子.问:兔子究竟藏在那个洞里?请输出兔子可能存在的洞号。若兔子无处可藏,输出-1
问题分析:
      循环问题,反复取模,遍历检索,标记
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
int b[10000+5];
int main()
{
int x,y;
int m,n,z;
while(scanf("%d%d",&y,&x)!=EOF)
{
m=1;
n=1;
z=0;
memset(b,0,sizeof(b));
for(int i=1; i<=x; i++)
{
if(i==1)
{
b[i]=1;
}
else
{
m++;
if(n+m>y)
{
n=(n+m-1)%y+1;
b
=1;
//cout<<m<<' '<<n<<endl;
}
else
{
n=n+m;
b
=1;
//cout<<m<<' '<<n+m<<endl;
}
}
}
for(int i=1; i<=y; i++)
{
if(b[i]==0)
{
z++;
printf("%d ",i);
}
}
if(z==0)
{
cout<<-1<<endl;
}
else
{
cout<<endl;
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: