当前位置: 首页 > wzjs >正文

网站建设的公司企业管理咨询

网站建设的公司,企业管理咨询,app软件一键生成工具,建设银行对账单查询网站约瑟夫问题 OpenJudge - 3254:约瑟夫问题No.2 输入&#xff1a; 每行是用空格分开的三个整数&#xff0c;第一个是n,第二个是p,第三个是m (0 < m,n < 300)。 最后一行是:0 0 0 &#xff08;即n个人围成一圈&#xff0c;从p号开始抱起&#xff0c;当报到m时就退圈&…

约瑟夫问题

OpenJudge - 3254:约瑟夫问题No.2

输入: 每行是用空格分开的三个整数,第一个是n,第二个是p,第三个是m (0 < m,n < 300)。

               最后一行是:0 0 0

(即n个人围成一圈,从p号开始抱起,当报到m时就退圈)

输出: 按出圈的顺序输出编号,编号之间以逗号间隔。

思路:

我们可知,先到的小孩先报数,所以我们需要借助一个队列;

而且我们需要实现的是一个循环队列(因为一个小孩报完数,后面可能还需要他再报数)我们可以通过将一个数出队再入队的时候实现循环队列;

  1. 将n个小孩放入队列(no是他们的编号)

  2. 第一轮报数(用say表示),从p开始报;我们一开始让着n个元素入队的时候就可以用报数的顺序进行入队。

  3. 后续报数:报数即为取出队首元素;打印他的值。

    如果报的数不是m,则say++,再将该元素放回队列

    如果报的数是m,取出队首元素后,若队列不为空,则直接打印元素;若队列为空,则打印元素并退出循环。

int main() {
​queue<int> myQueue;int n, p, m;while (1) {//第一个是n,第二个是p,第三个是m scanf("%d%d%d", &n, &p, &m);if (n == 0 && p == 0 && m == 0) {break;}//生成第一轮报数的队列(即将孩子编号放入队列)//p,p+1,.....n,1,2,....p-1int no = p;//no是孩子编号for (int i = 0; i < n; i++) {myQueue.push(no);no++;if (no > n) {no = 1;}}
​//开始报数    int say = 1;while (1) {int cur = myQueue.front();myQueue.pop();//如果报的数是mif (say == m) {say = 1;//该小孩读到了m,且出去后队列为空;这时打印完其编号后就退出循环了。if (myQueue.empty()) {printf("%d\n", cur);break;}else {printf("%d,", cur);}}else {//如果报的数字不是msay++;//把该小孩重新放回队列中myQueue.push(cur);
​}}}
}

http://www.dtcms.com/wzjs/133731.html

相关文章:

  • 重庆企业网站开发服务谷歌关键词搜索工具
  • 网页设计作业素材杭州网站排名seo
  • 网站开发怎样建立后台数据天津谷歌优化
  • 做美食网站的目的网络推广都有哪些方式
  • 做盗版网站 国外服务器吗做网站排名服务热线
  • wordpress留言墙百度关键词在线优化
  • 学校网站建设板块分析微信软文范例大全100
  • 网站的版权信息友情链接发布
  • 品牌网上做推广泰安网站seo
  • 菏砖网站建设怎么做seo信息优化
  • 研究网站开发意义30个免费货源网站
  • 网站为什么不收录seo技术分享博客
  • 网站怎么利用朋友圈做推广关键词排名优化报价
  • 网站建设商标保护企业网站建设公司
  • 桂林网站制作报价培训如何优化网站
  • 网站开发php还是java网址网域ip地址查询
  • 网站怎么做英文版的优化站点
  • 网站页尾的作用自助快速建站
  • 美国网上做调查赚钱10大网站推荐网站优化外包
  • 普通网站和门户网站的区别企业网站管理系统怎么操作
  • 如何美化wordpress页面成都网站seo费用
  • 香港做网站公司哪家好bt蚂蚁磁力搜索天堂
  • 生鲜网站建设本地广告推广平台哪个好
  • 网站建设与管理的书十大教育培训机构排名
  • 开发网站用什么语言好百度一下搜索引擎大全
  • 网站建设费怎么做账谷歌浏览器安卓下载
  • 青岛网红陕西seo
  • 网站的关键词报价的网站人民日报今天新闻
  • 北京个人网站建设多少钱大众网潍坊疫情
  • 一流的福州网站建设二级域名免费分发