题目描述
五年级一班有一个传统,全班一起庆祝当月过生日的同学。
有 𝑚 名学生都是 11 月份过生日,班主任决定挑一名学生作为寿星代表切蛋糕。
班主任将过生日的 𝑚 名学生随机围成一个圈,从 1 到 𝑚 进行编号。随机挑一个数字 𝑛(1≤𝑛≤9),从第一个同学开始连续报数,报数到 𝑛 的同学就出局,然后从下一位同学重新开始报数,一直到剩下最后一名同学。由于女生少,班主任决定每个女生有 2 次机会,也就是说,每名女生第 2 次数到 𝑛 时才出局。
例如,𝑚=3,其中有 1 名女生,编号顺序为 1,2,3,分别是男,女,男,𝑛=2。
第一轮报数,报到的是 2 号女生,暂不出局(注:女生有 2 次机会)。
第二轮报数,3 号男生报 1,号男生报 2 出局。
第三轮报数,2 号女生报 1 ,号男生报 2 出局,最后留下 2 号女生。
有 𝑚=5,其中 2 名女生,编号顺序为 1,2,3,4,5,分别为男,男,女,女,男。𝑛=3,挑选后的结果是 5 号,男生。(注:女生有 2 次机会)
输入格式
第一行输入数字为 𝑚(𝑚≤20),表示有 𝑚 个人;
第二行是 𝑚个整数,1 代表男生,0 代表女生。
第三行是 𝑛,表示 𝑛 是出局数字。(注意:女生有 2 次机会)
输出格式
输出留下学生的序号。
样例 #1
样例输入 #1
5
1 1 0 0 1
3
样例输出 #1
5
题解
#include <iostream>
using namespace std;
int main(){
int a[101],n,m,t,s=0,count;
cin>>n;
count=n;
for(int i=0;i<n;i++){
cin>>t;
if(t==1) a[i]=1;
else a[i]=2;
}
cin>>m;
int i=0;
while(count>1){
if(a[i]>0) s++;
if(s==m){
a[i]--;
if(a[i]==0) count--;
s=0;
}
i++;
i%=n;
}
for(int i=0;i<n;i++) if(a[i]) cout<<(i+1)<<endl;
return 0;
}
题外话:明天端午节,祝大家端午安康