猴子选大王
来源:互联网 发布:手机淘宝店招尺寸多少 编辑:程序博客网 时间:2024/05/16 15:54
任务:一群猴子按1 ,2,3……m进行编号,这群猴子按照1-m的顺序围坐一圈,从1开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。
要求:输入整数m,n(n < m)。中文提示按照m个猴子,数n个数的方法,输出为大王的猴子是几号,建立一个函数来实现此功能。
思路: 开始的时候,我们创建一个数组,数组的下标表示猴子的编号,并且把它的下标当做他的初始值,它还有一个功能就是把已经报数的猴子标记为0,这里我们使用取模的方法来实现循环报数的功能,我们初始化一个num=0, num%m就是用来报数的,每报一个数,我们就把它标记为0,循环n-1次,最后剩的没被标记的猴子即被选做大王
代码:
1.顺序表
#include"stdio.h"int main(){ int n,m; int monkey[100]; printf("请输入猴子数和最大报数\n"); while(scanf("%d%d",&n,&m)==2) { int ge = n; for(int i=1;i<=n;i++) { monkey[i] = i; } int cur = 1,ccur=1; int num = 0; while(n-1) { if(monkey[ccur]) { num++; if(num%m==0) { monkey[ccur]=0; n—; } }cur++; ccur = (cur-1)%ge+1; } for(int i=1;i<=ge;i++) { if(monkey[i]) printf("猴子大王的编号是: %d\n",monkey[i]); } } return 0;}
2.链表
#include"stdio.h"struct Ming{ int last,next;};int main(){ int n,m; while(scanf("%d%d",&n,&m)==2) { Ming monkey[n+1]; for(int i=1;i<=n;i++) { monkey[i].last=i-1; monkey[i].next=i+1; } monkey[1].last=n; monkey[n].next=1; int cur=1,num=0; while(monkey[cur].next!=cur) { num++; if(num%m==0) { monkey[monkey[cur].last].next=monkey[cur].next; monkey[monkey[cur].next].last=monkey[cur].last; } cur=monkey[cur].next; } printf("%d\n",cur); } return 0;}
0 0
- 猴子选大王问题
- 猴子选大王程序
- 约瑟夫 猴子选大王
- 猴子选大王
- 猴子选大王游戏
- 猴子选大王问题
- 猴子选大王
- 猴子选大王
- 猴子选大王问题
- 猴子选大王
- 实现猴子选大王
- 猴子选大王
- 猴子选大王
- 猴子选大王
- 猴子选大王-1074
- php猴子选大王
- 猴子选大王
- 猴子选大王
- JDBC学习入门
- css入门知识
- org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [XXXX]
- vue component组件小结
- 欢迎使用CSDN-markdown编辑器
- 猴子选大王
- JNI/NDK开发指南(十一)
- angularjsFileUpload+Springmvc上传文件
- 题目1068:球的半径和体积
- XGBoost Plotting API以及GBDT组合特征实践
- (转)高盛:老牌投行新生意,华尔街“谷歌”如何炼成?
- android自动化测试Uiautomator源码分析之五
- 如何定位和解决Andorid的内存溢出问题(大总结)
- 动态规划练习一 03:采药