临近年关,学校为活跃新年气氛,举办迎新年联欢活动,最后一个节目为“我是大赢家”抽奖活动,为增强互动效果,最后中大奖的中奖者由教师们自已互动产生,游戏规则是:全校所有教工,每人获得一个随机编号,编号不重复,然后按照编号大小顺时针手拉手围成一个圈,最后一个老师与第一个老师手拉手,接下来由第1个人指定 m 的值,从编号为1的人开始报数(1,2,3…),报到 m 的人出圈,不再参加互动游戏,接着再由出圈人的上一位老师新指定 m 的值,并重新开始报数,逆时针报到 m 的人出列,游戏过程中出圈的人由老师们自已决定,如此继续,顺时针出一个人,逆时针出一个人,直到圈中只剩下一个人,他就是今天的最大赢家。小明编写了一个程序实现上述功能,程序运行时,输入参加游戏的人数,每次有人出圈后,再输入下一个要出圈的人数。
#include<bits/stdc++.h> using namespace std; //删除索引为p的游戏者 int delete_(int a[110][3], int head, int p) { if (a[p][1] != -1) a[a[p][1]][2] = a[p][2]; if (a[p][2] != -1) _____(1)_______; if (head == p) head = a[head][2]; return head; } int main() { int a[110][3]; cout << "请输入参与游戏的人数 "; int n; cin >> n; for (int i = 0; i < n; i++) { a[i][0] = i + 1; a[i][1] = i - 1; a[i][2] = i + 1; } a[0][1] = n - 1; a[n - 1][2] = 0; int p, head; p = head = 0; while (_____(2)________) { cout << "请输入顺时针数第几位人出局 "; int m; cin >> m; for (int i = 0; i < m - 1; i++) _____(3)________; head = delete_(a, head, p); p = a[p][1];//退回到上一位游戏者 if (a[head][1] != head) { cout << "请输入逆时针数第几位人出局 "; cin >> m; for (int i = 0; i < m - 1; i++) p = a[p][1]; head = delete_(a, head, p); ______(4)________;//退回到上一位游戏者 } } cout <<______(5)________; }