ジョセフ再帰アルゴリズム

953 ワード

ジョセフは輪の問題を出して、再帰的な実現方法の問題は以下の通りです:同じ色のトランプは13枚です.1枚目を最後に入れ、一番上の1枚を抽出し、一番上の1枚を最後に入れます.最終結果はA 2 3 4 5 6 7 8 9 10 j Q kが元のカードを求める順番である.
/**********************************************
*Copyright (c) 2013,kevin
* All rights reserved.
*
*     :joseph.c
*       :        13 。      
*  ,        ,            ,
*    。     A 2 3 4 5 6 7 8 9 10 j Q k  
*        。          ,     
*
*     :0.1
*       :kevin
*     :2013 9 12 
**********************************************/
#include
#include
#define num 13//      
#define next 2//      

int joseph(int m,int k,int i)
{
	if(i==1)
	{
		return (m+k-1)%m;
	}
	else{
		return (joseph(m-1,k,i-1)+k)%m;
	}
}

int main()
{
	int i;
	int a[num];
	int b[num];
	printf("       :");
	for(i=1;i<=num;i++)
	{
		a[i-1]=joseph(num,next,i)+1;
		printf("%d ",a[i-1]);
	}
	printf("
:"); for(i=0;i