帮我用c++写个代码:Description n个人围成一个圆桌,按照顺时针的顺序1,2,...n进行编号;某一个人开始报一个数字,然后顺时针的下一个人会报数+1;当某个人报的数字含有7或是7的倍数时,这个人退出游戏,其他人接着报数!直到剩下一个人为止! Input 输入n,m,t;n代表人数,m代表开始报数的人的编号;t表示开始报数的人报出的数字是t; 然后接下来有n行,是这n个人的名字! Output 输出最后一个人的名字! Sample Input 5 3 20 liming wangze gongxiangjun wangming chenzhen Sample Output chenzhen
时间: 2024-03-06 12:52:16 浏览: 132
以下是你要求的 C++ 代码:
```c++
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, m, t;
cin >> n >> m >> t;
vector<string> names(n);
for(int i = 0; i < n; i++) {
cin >> names[i];
}
vector<bool> isOut(n, false);
int cntOut = 0;
int cur = m - 1;
while(cntOut < n - 1) {
int num = (t - 1) % n + 1;
while(isOut[cur]) {
cur = (cur + 1) % n;
}
if(num % 7 == 0 || num % 10 == 7) {
isOut[cur] = true;
cntOut++;
}
cur = (cur + 1) % n;
while(isOut[cur]) {
cur = (cur + 1) % n;
}
t++;
}
for(int i = 0; i < n; i++) {
if(!isOut[i]) {
cout << names[i] << endl;
break;
}
}
return 0;
}
```
输入格式为:第一行三个整数,分别是人数 n,开始报数的人的编号 m,以及开始报数的数字 t。接下来 n 行,每行一个字符串,表示每个人的名字。
代码使用了两个 vector 来记录每个人是否已经退出游戏以及每个人的名字。首先通过循环遍历每个人,将姓名存储在 names 中。然后使用一个循环来进行游戏,每轮游戏分别判断当前报数的人是否已经退出游戏,如果已经退出则跳过,否则判断报数是否包含 7 或是 7 的倍数,如果是则将当前报数的人退出游戏并将计数器 cntOut 加一。最后遍历每个人,找到没有退出游戏的人并输出其姓名即为结果。
希望能帮到你!
阅读全文