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
时间: 2024-02-24 10:54:10 浏览: 172
这是一道经典的约瑟夫环问题,可以使用循环链表或者数学方法解决。下面是使用循环链表的做法。
```c++
#include <iostream>
#include <string>
using namespace std;
struct Node {
string name;
int num;
Node* next;
};
int main() {
int n, m, t;
cin >> n >> m >> t;
Node* head = new Node{"", 0, nullptr};
Node* prev = head;
for (int i = 1; i <= n; i++) {
string name;
cin >> name;
Node* curr = new Node{name, i, nullptr};
prev->next = curr;
prev = curr;
}
prev->next = head->next;
Node* curr = head->next;
while (curr->num != m) {
curr = curr->next;
}
int count = t;
while (n > 1) {
count--;
if (count == 0) {
cout << curr->name << endl;
Node* temp = curr;
curr = curr->next;
prev->next = curr;
delete temp;
n--;
count = t;
} else {
prev = curr;
curr = curr->next;
}
}
cout << curr->name << endl;
delete curr;
delete head;
return 0;
}
```
在这个程序中,我们先用循环链表表示出这些人的关系。然后找到开始报数的人,接着模拟整个游戏的过程,每次数到7或是7的倍数时,就删除这个人节点,直到只剩下一个人为止。
阅读全文