八仙选首

来源:百度知道 编辑:UC知道 时间:2024/06/07 09:14:10
八仙选首,要求,不能吕洞宾当,利用约瑟夫问题解决,可以得出坐在第某个位置上的上永远不可能当首,求这个位置

#include <stdio.h>
void main()
{
int a[9],b[9],i,q,s,j,p,t,m=1,n;
a[9]={0,1,2,3,4,5,6,7,8};
for(q=0;q<=8;q++)
{for(i=1,s=1;i<=8;i++)
{while(q>1)
{s=(s+i-1)%i;
if(s==0) s=i;
for(j=s+1,p=8;j<=p;j++)
{a[j-1]=a[j];p=j;}
b[i]=a[0];
}
}
}
while(m<=8)
{for(n=0;n<=7;)
if(m!=b[n]) s=n++;
if(s==8) printf("%d",m);
m++;
}
}

这是我写的,运行显示 a[9]={0,1,2,3,4,5,6,7,8}; 这有EXPRESSION SYNTAX IN FUNCTION MAIN

请问下如何修改?这个程序是否正确?

好像是进入了个死循环中,看起来有点烦琐,重写了个

#include <stdio.h>
void main()
{
int b[9],i,j,k=0,l=0;
int a[9]={1,2,3,4,5,6,7,8,9};//?不是8人吗?怎么有9个了有点奇怪,不过是按9来写了
for(i=0;i!=8;)//i代表死亡的人数当有8人死亡时停止循环
{
for(j=0;j<9&&i!=8;j++)
{ if(a[j]!=0)//死亡的人用0表示,并以此判断改数是否在不停第数第9的序列中
{
k++;
if(k%9==0)//k用来计算数的数是不是第9个
{
b[l]=a[j];
a[j]=0;
i++;
l++;
}
}

}
}
printf("存活人员表(0表示死亡):");
for(j=0;j<9;j++)printf("%d ",a[j]);
printf("\n死亡顺序表:");
for(j=0;j<8;j++)printf("%d ",b[j]);
printf("\n");
}

#include <stdio.h>
void main()
{
int b[9],i,q,s,j,p,m=1,n=0;
int a[9]={0,1,2,3,4,5,6,7,8};
for(q=0;q<=8;q++)
{for(i=1,s=1;i<=8;i++)
{while(q>1)//程序能通过,但是程序好像是错的。这里while(q>1)循环里面
//没有