时间管理 教学大纲:反约瑟夫环在C语言中如何实现?

来源:百度文库 编辑:高校问答 时间:2024/05/04 12:04:46
C语言怎么实现反约瑟夫环的问题?

有两种数据操作方法,数组或指针都可以。
用数组相对来说容易一些。
main()
{int a[100],i,j,k,n;
scanf("%d",&n);/*输入少于100的人数*/
for(i=0;i<n;i++)
a[i]=i+1;
k=0;
while(1)
{for(i=0,j=0;i<n;i++)
{j++;
if(j==3) {a[i]=0;k++;j=0;}
if(k==n-1) goto out;}}
out: for(i=0;i<n;i++)
if(a[i]!=0) printf("%d",i+1);
getch();}

直接把号码逆制比如用数组的话
数组中存储的是1 2 3 4 5 6 7 8 9
你完全可以把顺序颠倒啊 a[0]=9 a[1]=8 ....

/*
在数组内放入1,对1的个数进行计数,每计数到三个1,则输出当前位置。
且当前位置清0。一直到所有的数都计数完毕。
*/

#include<stdio.h>

void main()
{
int a[21];
int n=0,i,sum,subsum=0;
printf("enter n:"); /*输入n*/
scanf("%d",&n);
sum=n;
for(i=1;i<=n;i++) /*初始化*/
a[i]=1;
i=0;
while(sum>0)
{
subsum=0;
while(subsum<3) /*计数3*/
{
i++;
if(i>n)
i-=n;

if(a[i]!=0)
{
subsum++;
}

}
printf("%d ",i); /*输出当前数*/
a[i]=0; /*清零*/
sum--;
}
}

enter n:
3(输入)
3 1 2(输出)

enter n:
10(输入)
3 6 9 2 7 1 8 5 10 4(输出)