其他分享
首页 > 其他分享> > 蓝桥杯 书院主持人 模拟

蓝桥杯 书院主持人 模拟

作者:互联网

问题描述   北大附中书院有m个同学,他们每次都很民主地决策很多事情。按罗伯特议事规则,需要一个主持人。同学们民主意识强,积极性高,都想做主持人,当然主持人只有一人。为了选出主持人,他们想到了一个办法并认为很民主。方法是:
  大家围成一圈,从1到m为每个同学编号。然后从1开始报数, 数到n的出局。剩下的同学从下位开始再从1开始报数。最后剩下来的就是主持人了。现在已经把同学从1到m编号,并约定报数为n的出局,请编程计算一下,哪个编号的同学将会成为主持人。 输入格式   一行,由空格分开的两个整数m n。 输出格式   一个整数,表示主持人的编号 样例输入 15 3 样例输出 5 样例输入 200 55 样例输出 93 数据规模和约定   10000>m>0; 100>n>0;
  时间限制1.0秒 是的没错,又是一道围成一个圈开始数数,谁数到n谁出局的俄罗斯转盘游戏。 同样的题目为什么我又写了一篇题解呢。 因为这道题目我debug了一小时。。。 细节啊细节啊,仰天长叹。 话说输出中间变量来debug的方法真好。 AC代码
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 bool vis[10010]; //vis[i]=true表示i已经出局 
 4 int main() {
 5     int m, n;
 6     cin >> m >> n;
 7     int t = 0; //当前数到的数字 
 8     int cnt = 0; //当前已经出局的人数 
 9     for (int i = 1; i <= m; i++) { //遍历1~m个人 
10         if (cnt == m - 1) { //如果已出局m-1人,则最后一人为答案 
11             for (int j = 1; j <= m; j++) {
12                 if (vis[j] == false) {
13                     cout << j << endl;
14                 }
15             }
16             return 0;
17         }
18         if (vis[i] == true) {
19             if (i == m) {
20                 i = 0;
21             }
22             continue;
23         } else {
24             t++;
25             //cout << i << " " << t << endl;
26             if (t == n) {
27                 vis[i] = true;
28                 t = 0;
29                 cnt++;
30             }
31         }
32         if (i == m) {
33             i = 0;
34         }
35     }
36     return 0;
37 }

标签:同学,出局,int,主持人,样例,蓝桥,书院,报数,模拟
来源: https://www.cnblogs.com/fx1998/p/12716158.html