简单数组实现约瑟夫环算法
来源:互联网 发布:熊猫软件公司反毒软件 编辑:程序博客网 时间:2024/04/28 06:37
问题描述:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从第一个人开始报数,数到m的那个人出桌;他的下一个人又从1开始报数,数到m的那个人又出桌;依此规律重复下去,直到圆桌周围的人全部出桌。设计算法求当给定任意n和m后,n个人的出桌次序。
算法原理:
1.n个人编号以1,2,3,…,n;
2.1开始报数,报到m出桌,输出该数,下一个人又从1开始报数,报到m出桌;
3.循环第2步;
4.全部出桌算法结束。
伪代码:
1.对n个人编号,存储在queue数组下标1到n(便于描述);
2.重复循环m次,利用flag变量做queue数组下标控制,每到m时,将queue[flag]置零,并输出该数,相当于出桌,用count变量对出桌人数计数,;
3.flag数到n时,做flag=flag%n;
4.当count=n时,终止循环,算法结束。
程序代码:
#include <iostream>#include <stdlib.h>using namespace std;int main() { int queue[100]; int n, m; int flag = 1; int count = 0; cout << "please input the n:" << endl; cin >> n; cout << "please input the m" << endl; cin >> m; queue[0] = 0; for (int i = 1;i <= n;i++) queue[i] = i;//编号 for (int j = 1;j <= m;j++) { if (queue[flag] == 0) j--; //queue[flag]=0,表示出桌,j要保持不变,继续验证下一个 if (j == m) { if (tem == 0) cout << "出队序列:" << endl; cout << queue[flag]; cout << " "; count++; queue[flag] = 0; //置零,出桌 j = 0; //重新报数 } if (flag >= n) flag = flag%n; if (count == n) { cout << endl; break; } flag++; } system("pause"); return 0;}
记:该算法时间复杂度o(mn)
后续优化待续。。。
0 0
- 简单数组实现约瑟夫环算法
- 约瑟夫环问题简单算法实现
- 数组实现约瑟夫环
- 约瑟夫环数组实现
- 约瑟夫环数组实现
- 约瑟夫环数组实现
- 约瑟夫环--数组实现
- 数组实现约瑟夫环
- 约瑟夫环实现算法
- 约瑟夫环的数组实现
- 约瑟夫环(数组模拟实现)
- 利用数组实现约瑟夫环
- Java 数组实现约瑟夫环
- 约瑟夫环的数组实现
- 用数组实现约瑟夫环
- 约瑟夫环java数组实现
- 简单约瑟夫环【队列实现】
- 约瑟夫(josephus)环算法实现
- theano的T.grad如何计算
- shiro 使用passwordService+passwordMatcher实现加解密
- 商业书链接
- 升级Sierra系统后一系列破解工具无法使用问题
- 一种安全的前后端数据交互方案
- 简单数组实现约瑟夫环算法
- CentOS 6.4x64安装git和gitolite服务器
- 数据库性能优化-整合
- jquery操作select(取值,设置选中)
- supermap那些事
- Android开发学习之路--Android Studio cmake编译ffmpeg
- Using Integrated SOA Gateway in Oracle EBS
- 【Java】拷贝assets的文件到SD卡指定路径
- GP或oracle数值千分位显示