[伴随编程] 实现报数游戏
You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.
这一节我们借助队列来辅助完成报数游戏的计算。
- 为了使得我们写的程序更通用,我们假设有 n 个小朋友,报到 m 的小朋友退出游戏,首先定义两个变量,然后从标准输入中读入。
在main函数里面写下
int n, m;
cin >> n >> m;
- 定义一个int类型的队列q。
在main函数里面接着刚才的输入写下
queue<int> q;
记得在开头 加上头文件
- 我们知道他们的报数顺序为 1 到 n,我们按照这个顺序把它们依次压入队列。
在queue<int> q;
下面写下
for (int i = 1; i <= n; i++) {
q.push(i);
}
-
现在我们开始模拟报数过程,定义一个变量cur来表示当前正在报的数,初始的时候从 1 开始。当队列中剩下的人数大于 1 的时候,游戏都还在进行。
从队首取一个小朋友,如果这个小朋友报数正好是 m,那他就退出游戏,然后下一个小朋友从 1 开始报数。
在main函数里面继续写下
int cur =1; //4
while(q.size() > 1){ //4
int x=q.front(); //4
q.pop(); //4
if(cur==m){ //4
cur =1; //4
}
}
- 那如果这个小朋友报的数不是 m,那么他还需要继续游戏,他刚报完数,需要等过一圈以后才会再次报数,我们让这个小朋友重新入队。
在while循环里面写下另外一种情况
int cur =1; //4
while(q.size() > 1){ //4
int x=q.front(); //4
q.pop(); //4
if(cur==m){ //4
cur =1; //4
}else{ //5
q.push(x); //5
cur++; //5
}
- 最后我们输出剩下的小朋友的编号。 在已经完成的while循环下面写下
cout << q.front() << endl;
- 点击 运行,输入7 5 可以得出上一个填空题的结果。
202402240000
- Status
- Done
- Rule
- ACM/ICPC
- Problem
- 22
- Start at
- 2024-2-24 13:00
- End at
- 2024-2-24 15:30
- Duration
- 2.5 hour(s)
- Host
- Partic.
- 9