日常练习——[BJ2011.X5] 选小寿星

题目描述

五年级一班有一个传统,全班一起庆祝当月过生日的同学。

有 𝑚 名学生都是 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;
}

题外话:明天端午节,祝大家端午安康

  • 17
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值