ヨセフス(25分)

Nの個人的な円は順次、1から始めて2、3番...新聞の数の順で、pは円の外側から撤退した後、人々の1,2,3のgettin数の人々の残りの部分と、その後のpに報告報告しましたループの外に出て、というように。終了順序に従って各人物の元のシリアル番号の出力を終了してください。

入力フォーマット:
入力単一ラインは、整数N(1 <= N <=備え 3000) と整数pを(1 <= p <= 5000)。

出力フォーマット:
[終了]一人一人の元の数の退出順次出力に、データのうちは、スペースで区切られていないが、ラインスペースの終わり。

サンプル入力:
ここでは、入力のセットを与えられています。例えば:

7 3

出力サンプル:
3627514

#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int a[3005];
int main ()
{
   int n,p,number=0,i=1,ans=0,flag=0;
   scanf("%d %d",&n,&p);
   while(1){
   	if(!a[i]){
   		number++;
   		if(number==p){
   		a[i]=1;
   		if(!flag){
   			printf("%d",i);
   			flag=1;
		   }else
		   printf(" %d",i);
   		
   		number=0;
   		ans++;
	   }
	}
   	i++;
   	if(i==n+1)
   	i=1;
   	if(ans==n)
   	break;
   } 
	return 0;
 } 
公開された57元の記事 ウォン称賛69 ビュー6147

おすすめ

転載: blog.csdn.net/zp1455604302/article/details/104025251