永发信息网

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

答案:2  悬赏:70  手机版
解决时间 2021-02-07 23:43
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));
}
最佳答案
供参考……
#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;
}
全部回答
这个问题叫约瑟夫环问题。 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
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
盱眙巷雅阁酒店地址有知道的么?有点事想过去
克罗恩病最常见的并发症是A.腹腔内脓肿B.吸收
大家觉得全新爱丽舍适合年轻人开吗...
适合14岁男孩看的电影或动画什么都行
盱眙金浩商务宾馆地址在什么地方,我要处理点
御剑问道 问心剑任务怎么进去
某企业以一张面额为30万的票据去银行贴现,银
盱眙旅社怎么去啊,我要去那办事
辐射岛骨折了怎么办
盱眙众悦宾馆地址好找么,我有些事要过去
请问电动助力车 1:1助力的原理是什么? 是怎
如何将flash的SWF格式转成SCR屏保格式?
金雨童幼儿园地址在哪,我要去那里办事
盱眙金马宾馆地址在什么地方,我要处理点事
一盆兰花,一只盛有浓氢氧化钠溶液的烧杯,一
推荐资讯
相石公路出口(阳澄湖北互通出口东南向)地址在
【徘徊造句】用徘徊的两个意思造句1.在一个地
新利机械地址有知道的么?有点事想过去
南海丹灶有电工证考吗?
东阿县姜楼供电营业厅地址在什么地方,想过去
惠普笔记本和华硕笔记本哪个好,
装甲战争南征北战任务pve伤害也算吗
发现妈妈疑似出轨怎么办
陆客博德在哪里啊,我有事要去这个地方
现代美发型屋地址好找么,我有些事要过去
(  )是对从事工商经营,缴纳产品税或增值
潇湘商务酒店(郴州汝城县)地址在什么地方,想
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?