这到底为什么输不出来???
  • 板块P1145 约瑟夫
  • 楼主Lmm_a
  • 当前回复1
  • 已保存回复1
  • 发布时间2021/7/20 14:55
  • 上次更新2023/11/4 14:04:06
查看原帖
这到底为什么输不出来???
469418
Lmm_a楼主2021/7/20 14:55
#include<iostream>
using namespace std;
int a[30],b[30];
int main()
{
	int n,k,m,j=0,i,max=1,s=0,q,c=0;
	cin>>k;
	n=k*2;
	for(i=k+1;;i+=k+1)//模拟m,i至少要为k+1 
	{
		do{
			++j;//判断每个人的位置 
			if(j>n) j=1;//如果数到最后一个人,从头开始 
			if(a[j]==0) ++s;//如果这个人没死,报数,计数器加一 
			if(s==i)//数到了i 
			{
				s=0;//计数器清零 
				b[j]=max;// 判断每个人死的顺序 
				++max;//死亡人数加一 
			}
		}while(max!=n);
	   for(q=1;q<=n;q++)
	   {
	   	if(q>=1&&q<=k)//如果是前k个好人 
	   	{
	   		if(b[q]<=k)//如果死的顺序是1-k 
	   		{
	   		   	break;//不符合结束循环 
	   		}
	   		else c++;//符合计数器累加 
	   	}
	   	else if(q>k&&q<=n)//如果是后k个坏人 
	   	{
	   	   if(b[q]>k)//死的顺序是k+1-n; 
		 {
			break;//不符合结束循环 
		 }
		 	else c++;//同上 
	   	}
	   }
	   if(c==n)//n个人死的顺序都满足条件 
	   {
	   	cout<<i;//输出i 
	   	return 0;//结束 
	   }
	}
	return 0;
}
2021/7/20 14:55
加载中...