• CodeForce-792B Counting-out Rhyme(模拟)


    Counting-out Rhyme

    CodeForces - 792B

    题意:

    n 个孩子在玩一个游戏。 孩子们站成一圈,按照顺时针顺序分别被标号为 1 到 n。开始游戏时,第一个孩子成为领导。 游戏进行 k 轮。 在第 i 轮中,领导会从他顺时针方向下一个孩子开始数 ai 个孩子。最后数到的那个孩子出局,再下一个孩子成为新的领导。

    举个例子, 现在圈内还剩 [8, 10, 13, 14, 16] 4个孩子,领导编号为 13 , ai = 12。那么出局的孩子为 16 。第 8 个孩子成为下一个领导。

    你需要写一个代码模拟这个过程,求出每轮比赛出局的孩子。

    Input

    第一行包含两个整数 nk (2 ≤ n ≤ 100, 1 ≤ k ≤ n - 1).

    第二行包含 k 个整数 a1, a2, ..., ak (1 ≤ ai ≤ 109).

    Output

    输出 k 个整数,第 i 个整数表示第 i轮出局的孩子。

    直接模拟一遍就好,对于k轮中的每一轮,先计算要往后数多少个人,找出出局者,然后再往后找新的领导者,重复循环即可。

    #include<iostream>
    using namespace std;
    #define maxn 110
    int a[maxn]={0};
    int main()
    {
        int n,k,x;
        cin>>n>>k;
        int cnt,first=1,ans;
        for(int j=0;j<k;j++)
        {
            cin>>x;
            cnt=x%(n-j);//n-j表示本轮还剩n-j个人
            if(cnt==0)//出局者是领导者自己
                cnt=n-j;
            for(int i=first+1;;i++)
            {
                if(i>n)
                    i=1;
                if(a[i]==0)
                    cnt--;
                if(cnt==0)//找到最后一个人
                {
                    a[i]=1;
                    ans=i;
                    for(int l=i+1;;l++)//寻找下一个领导者
                    {
                        if(l>n)
                            l=1;
                        if(!a[l])
                        {
                            first=l;
                            break;
                        }
                    }
                    break;
                }
            }
            cout<<ans<<" ";
        }
        return 0;
    }
  • 相关阅读:
    前端万字面经——进阶篇
    canvas 爬坑路【属性篇】
    Linux下提权反弹脚本
    修改和重置WAMP的phpMyAdmin密码
    如何调试Apache的URL重写(转载收藏)
    sharepoint 计算列的公式
    SharePoint控件的使用
    快速查看dll的PublicToken。
    DataCogsFieldControls 有时保存不上的问题
    遍历文件中的资源
  • 原文地址:https://www.cnblogs.com/YingZhixin/p/7105160.html
Copyright © 2020-2023  润新知