约瑟夫问题(猴子选大王)
来源:互联网 发布:淘宝卖家店名 编辑:程序博客网 时间:2024/05/17 04:16
问题描述
约瑟夫问题:有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 1024int 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]); }
0 0
- poj-约瑟夫问题(猴子选大王)
- 2746:约瑟夫问题(猴子选大王)
- 猴子选大王问题(约瑟夫环)
- 约瑟夫问题(猴子选大王)
- 猴子选大王问题(约瑟夫环)
- 约瑟夫问题(猴子选大王)
- 猴子选大王 - 约瑟夫问题
- 约瑟夫问题(猴子大王)
- 猴子选大王问题&&约瑟夫环问题
- 单链表实现猴子选大王(约瑟夫环问题)
- 猴子选大王(约瑟夫环问题)的OO解法
- 猴子选大王(约瑟夫环问题)两种解决方案
- 猴子选大王(约瑟夫问题)JAVA实现
- WV.11-猴子选大王(约瑟夫环问题)
- C语言实现猴子选大王(约瑟夫问题)
- 约瑟夫问题(猴子选大王) 链表实现
- 第四周项目四 猴子选大王(约瑟夫问题)
- 数据结构之约瑟夫问题---猴子选大王
- HDU 1358kmp
- extern关键字详解
- hdu 4990 Reading comprehension(矩阵法)
- Android抓包之Tcpdump和WireShark_6
- Linux用户和用户组管理
- 约瑟夫问题(猴子选大王)
- Android抓包之Tcpdump和WireShark__9
- Android抓包之Tcpdump和WireShark_11
- connect wireless with command
- oracle 配置开机启动实例
- Android抓包之Tcpdump和WireShark__12
- Android抓包之Tcpdump和WireShark__13
- CMainFrame Android抓包之Tcpdump和WireShark__10
- 堆和栈的区别(主要从内存分配方面来说)