『ジョセフ生者死者ゲーム』アルゴリズムC言語版

1764 ワード

アルゴリズムの授業の上の1つの小さい練習、線形の構造の表現と実現の2------順序表の簡単な応用《ジョセフの生者の死者のゲーム》
問題の説明と解の構想はソースコードの中ですでに注釈して、攻撃の参考、後ろの1部は最初に書いたので、効率はきわめて低くて、反面の教材としました.
#include<stdio.h>
/*
	       ——        
	
	  :  
	    :
		           :30        ,      ,      ,    ;        ,
		                ,         。  ,          ,   30   
		     ,       ,    ,   9  ,        ,            1 
		   ,   9  ,       ,    ,    15      。             
		    。
	  :    30       1-30,      0;
		              0    1          1,       ,   number%30,
		      0       number+1       0  ,      ,            。
		      count   9            ,  status  +1;
*/

void main(){

	int status=0;//      
	int a[30];
	int i=0;
	int number=0;//      ,    1~            
	int count=0;//1-9    
	//     
	for(i;i<30;i++)
		a[i]=i+1;
	//  begin
	while(status<15){
		if(a[number%30]!=0){
			if(count==8){
				a[number%30]=0;
				number++;
				count=0;
				status++;
				printf(" %d     %d
",status,number%30); } else{ count++; number++; } } else number++; } // printf(" :"); for(i=0;i<30;i++) if(a[i]!=0) printf("%d,",a[i]); }

次は効率の低いアルゴリズムです
#include <stdio.h>
void main(){
	int a[30];
	int status=0;
	int number=1;
	int j=1;
	int k=1;
	int i=1;
	int q=1;
	for(j;j<=30;j++){
		a[j-1]=j;	
	}
	
	while(status<15){
		while(i<9){
			while(a[(number-1)%30]==0){
				number++;	
			}
			i++;
			number++;
		}
		i=1;
		while(a[(number-1)%30]==0){
				number++;	
			}
		a[(number-1)%30]=0;
		number++;
		status++;

		k=1;
		while(k<=30){
		printf("%d,",a[k-1]);
		
		k++;
			}
		printf("
"); } printf("over
,"); }