R - Joseph

给所有人编号,前一半好人后一半坏人,从第零个开始数,数的时候用取余的方法确定在哪个位置,为前一半则跳出,因为好人不会出去,所以前一半标号永远不变,判断条件也因此不用改变,每次更新取余的人数

#include <iostream>
using namespace std;
int main()
{
	int p[50]={0},k,j[14]={0};
	while(cin>>k&&k)
	{
		if(j[k]!=0){
			cout<<j[k]<<endl;
			continue;
		}
		int n=2*k;
		int m=1;
		for(int i=1;i<=k;i++)
		{
			p[i]=(p[i-1]+m-1)%(n-i+1);
			if(p[i]<k){
				i=0;
				m++;
			}
		}
		j[k]=m;
		cout<<m<<endl;
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值