永发信息网

C语言问题:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),

答案:2  悬赏:70  手机版
解决时间 2021-02-07 23:43
  • 提问者网友:城市野鹿
  • 2021-02-07 08:25
C语言问题:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
下面是我自己写的程序,出来的答案是错的,求大神指出哪里错误
#include
void main ()
{
int a[20];
int m,n,k,i=0,x;
int *p;
p=a;
printf("请输入报数人数n:");
scanf("%d",&n);
a[0]=n;
for (i=1;i {
a[i]=i+1;
}
m=0;
while(m {
k=0;
while(k<3)
{
i=i%n;
if(a[i]!=-1)
{
k++;
if(k=3) i--;
}

i++;
}
a[i]=-1;
m++;
i++;
}
x=0;
while(a[x]==-1) {x++;}
printf("The last one is NO.%d\n",*(a+x));
}
最佳答案
  • 五星知识达人网友:躲不过心动
  • 2021-02-07 08:40
供参考……
#include "stdio.h"
int main(int argc,char *argv[]){
int n,ans,i;
scanf("%d",&n);
ans=0; 
if(n==0)
return 0;
for(i=2;i<=n;i++)
ans=(ans+3)%i;
printf("%d\n",ans%n+1);
return 0;
}
全部回答
  • 1楼网友:你哪知我潦倒为你
  • 2021-02-07 09:09
这个问题叫约瑟夫环问题。 n个人围成一圈,按顺序编号,分别为1、2、3..n。(你可以理解成每个人的座号)。 然后1号开始,每人依次报号。即 (这里假设n=5) (前面是座号、后面是他报的号) 1:1 2:2 3:3(退出) 现在只剩下座号为1、2、4、5的人,从3的下一个开始报号 4:1 5:2 1:3(退出) 2:1 4:2 5:3(退出) 2:1 4:2 2:3(退出) 最后剩下4,就是当n=5时,你要得到的值是4
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯