【科创网0184】选小寿星

选小寿星
难度级别:A; 运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B
试题描述
一班有一个传统,全班一起庆祝当月过生日的同学。有m名学生都是11月份过生日,班主任决定挑一名学生作为寿星代表切蛋糕。班主任将过生日的m名学生随机围成一个圈,从1到m进行编号。随机挑一个数字n(1<=n<=9),从第一个同学开始连续报数,报数到n的同学就出局,然后从下一位同学重新开始报数,一直到剩下最后一名同学。由于女生少,班主任决定每个女生有2次机会,也就是说,每名女生第2次数到n时才出局。  例如,m=3,其中有1名女生,编号顺序为1,2,3,分别是男,女,男,n=2。第一轮报数,报到的是2号女生,暂不出局(注:女生有2次机会)。第二轮报数, 3号男生报1,1号男生报2出局。第三轮报数,2号女生报1,3号男生报2出局,最后留下2号女生。  有m=5,其中2名女生,编号顺序为1,2,3,4,5,分别为男,男,女,女,男。n=3。挑选后的结果是5号,男生。(注:女生有2次机会)
输入
第一行输入数字为m,表示有m个人;m<20          
第二行是m个整数,1代表男生,0代表女生。          
第三行是n,表示n是出局数字。(注意:女生有2次机会)
输出
输出留下学生的序号
输入示例
5     
1 1 0 0 1   
3
输出示例
5
 
#include<iostream>

using namespace std;

int main()
{
    int n,i,chuju=0,jishu=0,m;
    cin>>n;
    int a[n],b[n];
    
    for(i=0;i<n;i++)
        b[i]=1;
    for(i=0;i<n;i++)
        cin>>a[i];
        
    cin>>m;
    while(chuju+1<n)
        for(i=0;i<n;i++)
        {
            if(b[i]==1)
                jishu++;
            if(jishu==m)
            {
                if(a[i]==1)
                {
                    b[i]=0;
                    chuju++;
                    jishu=0;
                }
                else if(a[i]==0)
                {
                    a[i]=1;
                    jishu=0;
                }
            }
        }
    for(i=0;i<n;i++)
        if(b[i]==1)
            cout<<i+1;
    return 0;
}


原题链接

原文地址:https://www.cnblogs.com/6666junyiliu/p/5997896.html