問題の説明
山の頂上に10個の円形の穴があります。キツネはウサギを食べたがっています。ウサギは「はい、でもあなたは私を見つけなければなりません。私はこれらの10個の穴に隠れます。最初に穴1に行きます。 、および2回目毎回1つの穴(つまり、穴3)を探し、2回目は2つの穴(つまり、穴6)を探します。以下同様に、回数は無制限です。」しかし、キツネは出入りしました。朝から晩まで1,000回ウサギはまだ見つかりませんQ:ウサギはどこに隠れていますか?
#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;
}
(追記:設定するうさぎの穴が100を超える場合は、コードを再度変更する必要があります)