2 条题解
-
0
#include <iostream> using namespace std; int main() { // 10个洞,编号0到9,visited数组记录每个洞是否被访问过 bool visited[10] = {false}; // 初始化为false,表示所有洞都未被访问 // 格莱尔起始位置在0号洞,但起始位置不算在1000次进洞中 int pos = 0; // 当前位置 // 模拟1000次进洞过程(第1次到第1000次) for (int k = 1; k <= 1000; k++) { // 第k次移动:跳过(k-1)个洞,相当于移动k步 // 洞是环形(0到9),所以每次移动后位置取模10 pos = (pos + k) % 10; // 标记当前进入的洞为已访问 visited[pos] = true; } // 输出未被访问的洞(尼克可能藏身之处) cout << "尼克可能躲在以下洞中: "; for (int i = 0; i < 10; i++) { if (!visited[i]) { // 如果洞i未被访问 cout << i << " "; } } cout << endl; return 0; } 程序说明: 问题分析: 有10个洞(0~9)围成一圈。 格莱尔从0号洞开始,第1次移动1步到1号洞,第2次移动2步到3号洞,第3次移动3步到6号洞,以此类推(第i次移动i步)。 移动1000次后,未被访问的洞就是尼克可能藏身的地方。 关键思路: 使用一个布尔数组 visited[10] 记录每个洞是否被访问过(初始为false)。 模拟移动过程:从起始位置0开始,每次移动k步(k从1到1000),更新位置(取模10处理环形结构),并标记访问过的洞。 最后遍历数组,输出未被标记的洞。 代码步骤: 初始化visited数组为false。 初始化当前位置pos = 0(起始位置,但不算在1000次移动内)。 循环1000次(k=1到1000): 计算新位置:pos = (pos + k) % 10(移动k步并取模)。 标记新位置对应的洞:visited[pos] = true。 遍历visited数组,输出未被访问的洞编号。 输出结果: 运行程序后,输出尼克可能藏身的洞编号(例如:2, 4, 7, 9)。 为什么这样计算? 每次移动步数k递增,位置更新公式 (pos + k) % 10 模拟了跳过洞的过程。 洞编号取模10确保在环形结构内循环。 1000次移动后,未被访问的洞就是尼克可以藏身的安全位置。 运行程序即可得到答案:尼克可能躲在2、4、7、9号洞中。
- 1
信息
- ID
- 280
- 时间
- 1000ms
- 内存
- 64MiB
- 难度
- 7
- 标签
- 递交数
- 18
- 已通过
- 9
- 上传者