C语言 约瑟夫问题程序错误帮忙修改

来源:百度知道 编辑:UC知道 时间:2024/05/21 07:57:43
题目是:有n个人围成一圈,顺序排号,从第一个人报数(从1报到3),凡报到3的人退出圈子,问最后留下的是原来的几号。

------------------------------------------------------------------
#include<stdio.h>
struct person
{
int nt;
int flag;
}
main()
{
int n,i,count=1; /*count设置1 你为了找数到3的那个人*/
printf("Input a number:");
scanf("%d",&n);
struct person p[n+1]; /*定义人数组第12行*/

for(i=1;i<=n;i++)
{
p[i].nt=i+1; /*存下一个人的号.第15行*/
p[i].flag=1; /*标志被踢除的人 1为存在的人 0为踢除*/
}

p[n].nt=1;
while(p[i].nt!=p[i])
{
for(i=1;i<n;i++)
{
if(count==3)
{
p[i].flag=0;
p[i-1].nt=p[i].nt;
count=0;
}
count++;
}
}
for(i=0;i<=n;i++)
if(p[i].flag==0) printf("the number is %d",p[i]);
}

我编译的出错信息是:
12:Expression syntax in function main
15:Undefined

1.数组在声明时,[]内必须是常量表达式,n是变量,编译时无法确定其值

2.while(p[i].nt!=p[i]),当然不等于了,左右两边都不是同种东西,怎么比较

struct person
{
int nt;
int flag;
}
最后忘加分号
struct person
{
int nt;
int flag;
};

N是多少啊??N决定答案啊