保函网

利用C解决约瑟夫问题。

发布时间:2025-11-23 | 来源:互联网转载和整理

这里补充一下约瑟夫问题的描述:N个人围成一圈,从第一个开始报数,数到M的人出队,然后他的下一位继续从1开始报数,数到M的出队,如此循环直到剩下一个人,求最后剩下的那个人最初是队伍中的第几位。

解决这道题可以采用模拟报数的方法,建立一个大小为N的数组,数组的第N个元素表示第N个人是否还在队伍中,首先将每个元素都置为1,表示全员都在队伍中。如果第N个人出队,则将第N个元素置为0。

模拟报数可以使用一个累加计数器,用它表示这轮报数已有多少人报数,然后循环访问每个人,若其在队伍中,则将计数器+1,如果累加到M,则这个人出队。如此循环直到N-1个人出队,仅剩1人。

最后遍历一下那个数组,找到还在队伍中的人就可以。

代码如下:

#includeusingnamespacestd;intmain(){intm,n,i,s=0,rem;//s为计数器,rem为剩余人数int*a;cout>n>>m;rem=n;a=newint[n];for(i=0;i1){s+=a[i];if(s==m)//第i个人出队,重置累加计数器{s=0;rem--;a[i]=0;}i++;i%=n;}for(i=0;i<n;i++)if(a[i]){cout<<剩下的人为:<<i<<endl;break;}delete[]a;return0;}

约瑟夫问题

上一篇:青海省会是哪个城市青海简称

下一篇:什么是感觉寻求

其他文章

  • 茅台酒和茅台镇的酒有什么区别?
  • 无羞无臊是什么意思
  • 2017临床医学考研吧
  • 金融学专业投资科学
  • 坐汽车从东莞到海口要多长时间
  • 白菜用英语怎么说 两颗白菜用英语怎么说
  • 江南十校哪十校
  • 教师资格证是永久性的吗(教师资格证是永久的吗)
  • cvt无级变速和6挡手自一体,有什么区别
  • 黄鹤楼写作背景20字(黄鹤楼写作背景)
  • 2023年达州职业技术学院单招报名条件有哪些
  • 2015年中考平果高中录取分数线是多少
  • 建筑工程测量前途如何?
  • 忠武路演员是什么意思 宋仲基是忠武路演员吗
  • 竹笋有哪些品种,竹笋哪些品种可以吃
  • renee英文名是什么意思
  • 记叙文的表达方式有哪五种(记叙文的表达方式)
  • 对女生说的情话古风句子很甜还撩
  • 麻雀肉怎么做好吃
  • 老鼠用英语怎么读