6.1例题--约瑟夫问题--2746
来源:互联网 发布:java job quartz 编辑:程序博客网 时间:2024/06/03 20:50
约瑟夫环问题有三种常见的解决方法,一是数组模拟,二是链表模拟,三是运用数学算法解决(不需要输出数列的情况下)
#include <iostream>#include <stdio.h>#include <string>#include <string.h>#include <vector>#include <list>#include <math.h>#include <algorithm>using namespace std;void josephus1(int n, int m)//数组模拟实现{int monkey[302];int i, nCount, p; for( i = 0 ; i <= n ; i++ )monkey[i] = 1;nCount = n ;i = 1;p = 1;while( nCount > 1 ){if( monkey[i]==1 ){if( p == m )//找到要出局的编号{monkey[i] = 0;p = 1 ;nCount-- ;}elsep++;}i++;if( i > n) i = 1;}for( i = 1 ; i <= n ; i++ )if(monkey[i] == 1)printf("%d\n",i);return;}void josephus2(int n, int m)//数学递归实现{int i, f ;f = 0;for( i = 2 ; i<= n ; i++ ){f = ( f + m ) % i ;}printf("%d\n",f+1);}int main(){ int n, m;while( scanf("%d %d",&n,&m) && n!=0 && m!=0 ){//josephus1(n,m);//数组模拟实现josephus2(n,m);//数学递归实现} return 1; }
不管用数组还是链表,时间复杂度都是O(mn),如果不需要输出出队的序列,可以考虑用数学公式递归实现,原理见博文。
- 6.1例题--约瑟夫问题--2746
- 紫书 例题10-25 约瑟夫的数论问题 UVa1363
- POJ读书笔记6.1 - 约瑟夫问题 2746
- oj 2746 约瑟夫问题
- poj 2746:约瑟夫问题
- POJ 2746:约瑟夫问题
- POJ 2746 约瑟夫问题
- 2746:约瑟夫问题
- 百练-2746-约瑟夫问题
- 百练--2746 -- 约瑟夫问题
- 百练--2746--约瑟夫问题
- 百练 2746:约瑟夫问题
- 百练2746:约瑟夫问题
- 约瑟夫问题、约瑟夫环
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- wordpress 模版
- 万兆以太网解决方案
- Ubuntu安装TomCat
- IntentFilter
- 用 Eclipse 开发 Android 应用程序[转]
- 6.1例题--约瑟夫问题--2746
- 解决电脑重启后声音图标不显示的问题
- Sipdroid会话邀请流程(二)
- Linux音频编程指南四
- 循环将一张表的数据添加到另一张表,重复数据不添加
- .NET程序员,我们应该更专业点
- sift特征向量
- 服务器端 要用tomacat,所以 安装eclipse,安装步骤如是
- How to create .lib file when you only have .dll and .h files