首页 > 其他 > 详细

蓝桥杯 书院主持人 模拟

时间:2020-04-16 23:11:49      阅读:80      评论:0      收藏:0      [点我收藏+]
问题描述
  北大附中书院有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 }

蓝桥杯 书院主持人 模拟

原文:https://www.cnblogs.com/fx1998/p/12716158.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!