问题描述
围绕着山顶有10个圆形排列的洞,狐狸要吃兔子,兔子说:”可以,但必须找到我,我就藏于这10个洞中,你先到1号洞找,第二次隔1个洞(即3号洞)找,第二次隔2个洞(即6号洞)找,以后如此类推,次数不限.”但狐狸从早到晚进进出出了1000次,仍没有找到兔子.问:兔子究竟藏在那个洞里?
#include<iostream>
using namespace std;
typedef int Sqlist[100];
//函数声明
void Initlist(Sqlist L, int n);//初始化兔子洞
void capture(Sqlist L, int n, int m);//捕捉兔子函数
void judge(Sqlist L, int n);//判断兔子位置
int main()
{
int cavesize, time;
cout << "请输入你要设置__个洞口:";
cin >> cavesize;
cout << "请输入狐狸寻找的次数:";
cin >> time;
Sqlist L;
Initlist(L, cavesize);
capture(L, cavesize, time);
judge(L, cavesize);
return 0;
}
void Initlist(Sqlist L, int n)
{
int i;
for (i = 1; i <= n; i++)
{
L[i] = 1;
}
}
void capture(Sqlist L, int n, int m)
{
int carry = 1, num = 0, i;
for (i = 0; i < m; i++)
{
num = num + carry;
if (num == n)L[n] = 0;
else L[num % n] = 0;
carry++;
}
}
void judge(Sqlist L, int n)
{
cout << "兔子可能的藏身之处为:";
int i;
for (i = 1; i <= n; i++)
{
if (L[i] == 1)
{
cout << i << "号洞" << " ";
}
else
{
cout<<"无"<<endl<<"狐狸逮到了兔子";
break;
}
}
cout << endl;
}
(PS:如果要设置的兔子洞超过100,需要重新修改代码)