c++拍7游戏,很多人都玩过,现在我们的规则是这样的,N个人围坐一圈,编号分别是1-N,从编号为1的人开始依次报数(当然从1开始报数),凡是报到的数字含有7或是7的倍数的人退出游戏。 请你编程求出每一个退出游戏人的编号。
时间: 2024-05-12 10:15:18 浏览: 14
好的,这个问题可以用模拟的方法解决。我们可以使用一个数组 `is_out` 来记录每个人是否已经退出游戏,初始时所有人都没有退出游戏,因此可以将数组所有元素初始化为 `false`。然后我们可以使用一个变量 `count` 来记录当前报数的数字,初始时 `count` 的值为 1。接着我们进入一个循环,每次循环中,从编号为 1 的人开始,依次报数,如果当前报数的数字包含 7 或者是 7 的倍数,则将该人标记为已退出游戏,并输出该人的编号。最后我们找到下一个未退出游戏的人作为下一轮的起始人,继续进行报数,直到只剩下一个人未退出游戏为止。
下面是 C++ 代码实现:
```c++
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n;
cin >> n; // 输入总人数
vector<bool> is_out(n, false); // 记录每个人是否已退出游戏
int count = 1; // 当前报数的数字
int curr = 0; // 当前报数的人的编号
int remain = n; // 剩余未退出游戏的人数
while (remain > 1) { // 当剩余未退出游戏的人数大于1时继续游戏
if (!is_out[curr]) {
if (count % 7 == 0 || count % 10 == 7) { // 如果当前报数的数字包含7或者是7的倍数
is_out[curr] = true; // 标记该人已退出游戏
cout << curr + 1 << " "; // 输出该人的编号
remain--; // 剩余未退出游戏的人数减1
}
count++; // 报数加1
}
curr = (curr + 1) % n; // 找到下一个未退出游戏的人作为下一次报数的起始人
}
for (int i = 0; i < n; i++) { // 输出最后剩下的那个人
if (!is_out[i]) {
cout << i + 1 << endl;
}
}
return 0;
}
```
希望能够帮到你!