猴子选大王(数组按顺序循环删除某个数)
2017-12-24 20:37
295 查看
有n只猴子围成一圈,每只猴子从1到n依次编号。猴子们打算从中选出一个大王,经过协商,决定出选大王的规则:从第一个猴子开始循环报数,数到m的猴子出圈,最后剩下来的就是大王。你的任务是计算哪一个编号的猴子成为大王。
输入与输出要求:首先输入两个整数n(1<=n<=100)和m(m<=n)。n代表猴子的总个数,m代表每轮报数的猴子数。输出第几只猴子是大王。
程序运行效果:
Sample
1:
7↙
3↙
4
输入与输出要求:首先输入两个整数n(1<=n<=100)和m(m<=n)。n代表猴子的总个数,m代表每轮报数的猴子数。输出第几只猴子是大王。
程序运行效果:
Sample
1:
7↙
3↙
4
#include<stdio.h> int succ(int c); //到达边界时,返回下一个猴子序号为1 int nextMonkey(int t); // 返回下一个没有被排除的猴子的序号 int n,m; //设置全局变量,便于在子函数中对数据的利用 int a[101]; //存储猴子的数量 int main(void) { int i,j,p,m; scanf("%d%d",&n,&m); for(i=1;i<=n;i++) a[i]=1; //初始值全都设为1,1表示猴子没被排除,0表示猴子已被排除 p=1; //这里p表示从第一只猴子开始排除 for(i=1;i<n;i++) //从1开始 ,循环n-1次 { for(j=0;j<m-1;j++)//m为循环间隔 { p=nextMonkey(p);}//将该轮到的猴子序号进行更新 a[p]=0; //循环结束,选中猴子被淘汰,设为0 p=nextMonkey(p); //开始下一次循环,将p更新到下一个没被淘汰的猴子上 } printf("%d",p); //循环彻底结束 return 0; } int succ(int t) { if(t==n) return 1;//一环循环一圈,开始下一圈 return t+1; } int nextMonkey(int t) { int i; i=succ(t); while(a[i]!=1) //判断猴子是否被淘汰 i=succ(i);//没被淘汰,直接更新到下一个猴子序号 return i; }
相关文章推荐
- 猴子选大王,有1-100个数字,每数6位删除一个,顺序循环,最后只有一个数字的时候是1-100中的几?
- PHP学习笔记——删除数组中的值实例(猴子选大王)
- 有一个数组a[N]顺序存放0~N-1,要求每隔两个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。以8个数(N=7)为例:{0,1,2,3,4,5,6,7},0->1->2(删除)->3->4->5(删除)->6->7->0(删除),如此循环直到最后一个数被删除。
- 第九周--数据结构--猴子选大王【数组】之一
- 第九周项目1-猴子选大王(数组版)
- 循环a数组(值代表b的下标)删除b数组中存在的记录,从后往前删
- JS操作数组循环删除指定元素,splice(i,1)出错解决方案
- 循环删除数组中的元素
- 第九周 数组与广义表 项目1 -- 猴子选大王(数组版)
- 第9周项目1 - 猴子选大王(数组版)
- 第9周项目1-猴子选大王(数组版)
- 第九周项目1——猴子选大王(数组版)
- 数组-11. 猴子选大王(20)
- 第八周(2) 项目1 - 猴子选大王(数组版)
- 第九周项目1-猴子选大王(数组版)
- 第九周项目1猴子选大王(数组版)
- 第9周项目1-猴子选大王(数组版)
- 循环删除数组的数
- 数据结构上机实践第八周项目6- 猴子选大王(数组版)
- 循环数组时,删除符合条件的当前元素