100个人围成一圈c语言,C语言 约瑟夫圈问题:N个人围成一圈,从第一个人开始按顺序报数并编号1,2,3,……N,然后开始从第一个人转圈报数,凡是报到3的退出圈子。则剩下的最后一个人编号是多少。...

样例输入3  输出2

输入100   输出91

代码及分析:

#include

int main()

{

int i,n,N,out,a[1000];

out=i=n=0;            //用out记录退出圈子的人,初始化0;

printf("输入约瑟夫圈大小");

scanf("%d",&N);

for(i=0;i

{

a[i]=1;

}

i=0;

while(out!=N-1)          //利用while循环找到剩下的人的编号;直到出圈的人=N-1时候停止;

{

if(a[i]==1)           //由于a[i]=1表示在圈内,则只要有a[i]==1,并令n++,记录下他报的数;

{

n++;

}

if(n==3)            //由于报到3即出圈,后继续从1开始报;由于只要报到n=3,则该人即出圈,则用out++来记录出圈的人数;并且将该人所在a[i]从1                      改为0,表示该人已经出圈,下一次循环时该人不参与报数;

{

a[i]=0;n=0;out++;

}

i++;

if(i==N)             //由于N个人围成了一个圈,则如果报到了第N个人,则下一个人为编号1,则赋值i=0;继续下一次查找;

{

i=0;

}

}

for(i=0;i

if(a[i]==1)

{

printf("最后剩下的是第%d个人",i+1);break;

}

return 0;

}

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值