zoukankan      html  css  js  c++  java
  • 201712-2 游戏

    问题描述
      有n个小朋友围成一圈玩游戏,小朋友从1至n编号,2号小朋友坐在1号小朋友的顺时针方向,3号小朋友坐在2号小朋友的顺时针方向,……,1号小朋友坐在n号小朋友的顺时针方向。
      游戏开始,从1号小朋友开始顺时针报数,接下来每个小朋友的报数是上一个小朋友报的数加1。若一个小朋友报的数为k的倍数或其末位数(即数的个位)为k,则该小朋友被淘汰出局,不再参加以后的报数。当游戏中只剩下一个小朋友时,该小朋友获胜。
      例如,当n=5, k=2时:
      1号小朋友报数1;
      2号小朋友报数2淘汰;
      3号小朋友报数3;
      4号小朋友报数4淘汰;
      5号小朋友报数5;
      1号小朋友报数6淘汰;
      3号小朋友报数7;
      5号小朋友报数8淘汰;
      3号小朋友获胜。
      给定nk,请问最后获胜的小朋友编号为多少?
    输入格式
      输入一行,包括两个整数nk,意义如题目所述。
    输出格式
      输出一行,包含一个整数,表示获胜的小朋友编号。
    #include<bits/stdc++.h>
    using namespace std;
    const int MAXN = 1000 + 10;
    bool vis[MAXN];
    int main(){
        int n, k;
        scanf("%d%d", &n, &k);
        int cnt = 0;
        int id = 0;
        int tmp = n;
        if(n == 1){
            printf("1
    ");
            return 0;
        }
        while(1){
            ++id;
            if(id > n) id -= n;
            if(vis[id]) continue;
            ++cnt;
            if(cnt % k == 0 || cnt % 10 == k){
                vis[id] = true;
                --tmp;
            }
            if(tmp == 1){
                break;
            }
        }
        for(int i = 1; i <= n; ++i){
            if(!vis[i]){
                printf("%d
    ", i);
                break;
            }
        }
        return 0;
    }
    

      

  • 相关阅读:
    倍增或线段树,给出一个数,让它模一连串的数
    江西财经大学第一届程序设计竞赛
    L2-027. 名人堂与代金券
    hdu 3038 给区间和,算出多少是错的
    cf166e 在四面体上寻找路线数 递推,取模
    cf946d 怎样逃最多的课dp
    PAM练习
    PAM模板
    E. Erase Subsequences dp
    CSU2004:Finding words(含指定不相交前后缀的模式串计数)
  • 原文地址:https://www.cnblogs.com/tyty-Somnuspoppy/p/8530078.html
Copyright © 2011-2022 走看看