题目描述
上机练习5.1.7 围绕着山顶有10个洞,一只狐狸和一只兔子各住一个洞。狐狸总想吃掉兔子。一天兔子对狐狸说:“你想吃我有一个条件,先把洞从1~10编上号,你从10号洞出发,先到1号洞找我;第二次隔1个洞找我,第三次隔2个洞找我,以后依此类推,次数不限。若能找到我,你就可以饱餐一顿。不过在没有找到我以前不能停下来。”狐狸满口答应就开始找了,它从早到晚找了1000次洞,累得昏了过去也没有找到兔子。请问,免子躲在几号洞里?
输入
无输入。
输出
一行,按顺序输出兔子可能躲藏的洞的编号,用空格分隔,行尾不能有空格。
#include <iostream>
#include <cmath>
using namespace std;
// 函数声明:判断兔子是否能躲在一个特定的洞中不被狐狸找到
bool canHideInHole(int rabbitHole) {
int foxHole = 10; // 狐狸初始位置在10号洞
for (int i = 0; i < 1000; ++i) { // 狐狸最多查找1000次
// 计算狐狸这次要找的洞,步长为i+1
int step = i + 1;
foxHole = ((foxHole - 1 + step) % 10) + 1; // 更新狐狸的位置
// 检查是否找到了兔子
if (foxHole == rabbitHole) {
return false; // 兔子被找到了,返回false
}
}
return true; // 兔子躲过了所有的查找,返回true
}
int main() {
bool foundSafeHoles = false; // 标记是否已经找到安全的洞
for (int hole = 1; hole <= 10; ++hole) { // 遍历所有可能的洞(1到10)
if (canHideInHole(hole)) { // 判断兔子是否能躲在这个洞中
if (foundSafeHoles) {
cout << " "; // 如果之前已经找到过安全的洞,则输出空格分隔
}
cout << hole; // 输出当前安全的洞编号
foundSafeHoles = true; // 标记已经找到安全的洞
}
}
cout << endl; // 输出换行符
return 0; // 返回0表示程序正常结束
}
3871

被折叠的 条评论
为什么被折叠?



