• 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;
    }
    

      

  • 相关阅读:
    Java生产者与消费者(下)
    Java生产者与消费者(上)
    Java中的继承和接口
    syslog(),closelog()与openlog()--日志操作函数
    Nagle算法
    TCP_NODELAY详解
    Linux "零拷贝" sendfile函数中文说明及实际操作分析
    pdflush的工作原理
    proc/sys/net/ipv4/下各项的意义
    求最低价格
  • 原文地址:https://www.cnblogs.com/tyty-Somnuspoppy/p/8530078.html
Copyright © 2020-2023  润新知