猴子选大王(数组按顺序循环删除某个数)
来源:互联网 发布:淘宝自动下架的原因 编辑:程序博客网 时间:2024/05/22 04:32
有n只猴子围成一圈,每只猴子从1到n依次编号。猴子们打算从中选出一个大王,经过协商,决定出选大王的规则:从第一个猴子开始循环报数,数到m的猴子出圈,最后剩下来的就是大王。你的任务是计算哪一个编号的猴子成为大王。
输入与输出要求:首先输入两个整数n(1<=n<=100)和m(m<=n)。n代表猴子的总个数,m代表每轮报数的猴子数。输出第几只猴子是大王。
程序运行效果:
Sample 1:
7↙
3↙
输入与输出要求:首先输入两个整数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;}
阅读全文