约瑟夫环问题
来源:互联网 发布:宇宙几维 知乎 编辑:程序博客网 时间:2024/05/17 21:54
约瑟夫环
题目描述
有n青蛙围成一圈,顺序排号。从第1个青蛙开始报数(从1到3报数),凡报到3的青蛙退出圈子,问最后留下的青蛙是原来的第几号的那个青蛙。
输入
初始青蛙数n
输出
最后一青蛙的初始编号
样例输入
3
样例输出
2
题意
先将青蛙编号(从1到n),定义一下标 表示青蛙所报的数,凡报到3的青蛙退出剩下的青蛙继续报数直到剩下一只青蛙为止。
思路
1: 将青蛙编号(从1到n)
2: 定义一下标”k”表示青蛙所报的数字。
3 : 凡报到3的青蛙退出(即当k=3时该青蛙退出)此时下一个青蛙又该从1开始报数,即使k=1。
4:将每一次循环完一遍所剩下的青蛙留下来进行下一次循环。
5:重复上述过程直到剩下一只青蛙为止。
代码
#include <stdio.h>int main(){ int a[100000],b[100000]; int n,s=1,i=0; scanf("%d",&n); //起始的青蛙数 for(i=0;i<n;i++) //将起始的青蛙从1开始编上序号 { a[i]=s; s++; } //编序完成 int j=0,k=0; int fun; //标记变量 用来统计每轮淘汰掉的青蛙总数 while(n>1) { fun=0; //每轮过后 都返回0 for(i=0;i<n;i++) { k++; //定义的下标 表示该青蛙所报的数 if(k!=3) { b[j]=a[i]; //所报的数不是3 保留赋给数组b j++; } if(k==3) { fun++; //所报的数是3 离开 k=0; //并将k变回0 } } n-=fun; //所剩青蛙总数 for(i=0;i<n;i++) { a[i]=b[i]; //将所剩下的青蛙的序号返给数组a } j=0; } //重复上述判断 直至仅剩一只青蛙 printf("%d",a[0]); //输出所剩的那只青蛙的编号 return 0;}
阅读全文
0 0
- 约瑟夫问题、约瑟夫环
- Josephus约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题(Josephus)
- 约瑟夫环问题--java
- 约瑟夫环问题 Josephus
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 求解约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 设计模式学习-装饰器模式
- 支持向量机SVM
- 解剖App 获取里面所有的提图片,按照分辨率分类
- easyui之accordion
- andriod自定义View绘制形, 圆形, 三角形,...
- 约瑟夫环问题
- js之执行环境(作用域)
- cpu之PCJump
- vue之图标字体制作
- linux下硬盘性能(网络盘)测试工具fio使用
- spring依赖注入引发的一点思考
- 写点什么?
- Element之获取子节点方法
- unittest框架实战(三)