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.

 

                                        

 

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