选小寿星 |
难度级别: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; }