linux下用c語言實現約瑟夫環遊戲

       約瑟夫環是一個比較有趣的遊戲。玩法很簡單:一開始每人會有一個序號,並給出一個數字m;然後從第一個人開始報數,報到數字m的就離開隊列,下一個從新開始由1開始報數;到最後一個時,第一個接着報數;以此類推,直到剩下最後一個人,就是勝利者。

       在linux中,c89模式的環境中,遊戲的程序實現如下:

#include <stdio.h>
#define H 12757   //如果有12757的序號,請改變H的值 
int main(){
	int n,m;
	printf("請輸入人數:");
	scanf("%d",&n);
	int a[n],i;
	for(i=0;i<n;i++){
		printf("請輸入第個%d人的號碼:",i+1);
		scanf("%d",&a[i]);
	}
	printf("請輸入要踢出的人的報數號碼:");
	scanf("%d",&m);
	int *p1,*p2,*p3,s=0;
	p1=&a[0];
	p3=&a[0];
	p2=&a[n-1];
	for(i=0;i<n;i++){
		if(a[i]==0){
			a[i]=H;
			p3++;
			break;
		}
	}
	p3=a;
	for(i=0;i<n-1;i++){
		s=0;
		while(1){
			if((*p3)!=0){
			s++;
			}
			if(s==m){
				*p3=0;
				if(p3==p2){
					p3=p1;
				}
				else{
					p3++;
				}
				break;
			}
			if(p3==p2){
				p3=p1;
			}
			else{
				p3++;
			}
		}
	}
	for(i=0;i<n;i++){	
		if(a[i]!=0){
			if(a[i]!=H){
				printf("第%d個爲最後存活的人,序號爲%d\n",i+1,a[i]);
			}
			else{
				a[i]=0;
				printf("第%d個爲最後存活的人,序號爲%d\n",i+1,a[i]);
			}
		}
	}
	return 0;
}


程序中首先讓你決定由幾個人玩遊戲,在給每一個人一個序號(序號可以無序,可以爲0;但是不可以是N的值,有的話可以改變N的值就可以了。),接着程序會自動運行,選出最後一個,再輸出。

實現的具體過程:

首先建立一個有n-1循環的for循環(n爲人數)

然後再建立一個無限循環:其中1.判斷此人是否離開,如果不是s+1(s是人報的數),再判斷s是否等於m,等於就離開。然後下一個報數,如果是最後一個人,則下一個轉回到第一個。

執行完for循環時就剩最後一個人,輸出。

 

程序執行的結果是:

輸入各種數據:輸出的結果是:

可以看出,輸出的值是正確的。

這裏要注意N我定值是12757,所以序號不可以輸入12757.

 

                                        

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章