约瑟夫问题(猴子选大王)
2014-09-11 22:03
447 查看
问题描述
约瑟夫问题:有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始报数,一直数到m,数到m的猴子退出圈外,剩下的猴子再接着从1 开始报数。就这样,直到圈内只剩下一只猴子时,这个猴子就是猴王,编程求输入n,m后,输出最后猴王的编号。
输入数据
每行是用空格分开的两个整数,第一个是 n, 第二个是 m ( 0 < m, n < 300)。最后一行是:0 0
输出要求
对于每行输入数据(最后一行除外),输出数据也是一行,即最后猴王的编号
输入样例:
6 2
12 4
8 3
0 0
输出样例:
5
1
7
约瑟夫问题:有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始报数,一直数到m,数到m的猴子退出圈外,剩下的猴子再接着从1 开始报数。就这样,直到圈内只剩下一只猴子时,这个猴子就是猴王,编程求输入n,m后,输出最后猴王的编号。
输入数据
每行是用空格分开的两个整数,第一个是 n, 第二个是 m ( 0 < m, n < 300)。最后一行是:0 0
输出要求
对于每行输入数据(最后一行除外),输出数据也是一行,即最后猴王的编号
输入样例:
6 2
12 4
8 3
0 0
输出样例:
5
1
7
#include #define MaxSize 1024 int jose(int mon[],int n,int m) { int b[MaxSize]; int count=0; //count是记录退出圈外的猴子个数 int i=-1; //从0号位置的猴子开始计数 int k; int d; for(k=0;k { mon[k]=k+1; //设置猴子的编号 } while(count { d=0; while(d { i=(i+1)%n; //循环选取 if(mon[i]!=0) d++; } b[count]=mon[i]; //将出列的猴子存至数组b中 mon[i]=0; count++; } // for(i=0;i // { // printf("%d ",b[i]); // } return b[n-1]; } void main() { int n,m; int king[MaxSize]; int i=0,j,num=0; int mon[MaxSize]; printf("输入n和m的值:\n"); while(scanf("%d %d",&n,&m)==2) { if(m==0&&n==0) { break; } else { king[num]=jose(mon,n,m); num++; } } printf("输出最后猴王的编号:\n"); for(j=0;j printf("%d\n",king[j]); }
相关文章推荐
- 第19周上机实践项目2——猴子选大王(约瑟夫问题)
- 约瑟夫问题(猴子选大王)
- 2746:约瑟夫问题(猴子选大王)
- 第二十四周项目4-猴子选大王(约瑟夫问题)
- 约瑟夫问题--猴子选大王
- C语言实现猴子选大王(约瑟夫问题)
- java实现猴子选大王问题(约瑟夫问题)
- 约瑟夫问题——猴子选大王 双向指针
- POJ3750: 小孩报数问题+一道经典约瑟夫问题(猴子选大王)
- 约瑟夫问题的PHP实现——猴子选大王的问题
- 猴子选大王 - 约瑟夫问题
- 约瑟夫问题(猴子选大王) 链表实现
- poj-约瑟夫问题(猴子选大王)
- 蓝桥杯--猴子选大王-约瑟夫问题
- 算法_php猴子选大王_约瑟夫问题
- 第二十四周项目4-猴子选大王(约瑟夫问题)
- 猴子选大王(约瑟夫问题)JAVA实现
- 数据结构之约瑟夫问题---猴子选大王
- 约瑟夫问题(猴子选大王)
- 猴子选大王问题&&约瑟夫环问题