求猴大王
作者:互联网
n只猴子围坐成一个圈,
按顺时针方向从1到n编号。
然后从1号猴子开始
沿顺时针方向从1开始报数,
报到m的猴子出局,
再从刚出局猴子的下一个位置重新开始报数,
如此重复,直至剩下一个猴子,
它就是大王。
设计并编写程序,实现如下功能:
(1) 要求由用户输入开始时的猴子数n、
报数的最后一个数m。
(2) 给出当选猴王的初始编号。
#include <stdio.h> int main() { int a[100] = {0}; //如果有5只猴子,a[0] = 1, a[1] = 2, a[2] = 3, a[3] = 4, a[4] = 5; int n, i, j, k; //n猴子数, k每轮数数,数到哪了,数到的位置也就是数组下标 int m; //m数到的数 scanf("%d", &n); scanf("%d", &m); for (i = 0; i < n; i++) //数组付初值 { a[i] = i + 1; } k = 0; while(a[1] != 0) //是不是只剩一只猴子?如果不是,循环 { for (i = 0; i < m - 1; i++) //m = 4 { k++; //k很重要,代表数到的位置,也代表要出列的猴子 k = k % n; } for (j = k; j < n + 1; j++) //把后面的每个数组的数前移,也就是某个猴子出列 { a[j] = a[j + 1]; } for (i = 0; i < n; i++) //调试用 { printf("%d,",a[i]); } printf("\n"); n--; //上面的一轮已经出列一个猴子了,n-- } printf("last monkey is %d\n", a[0]); }
标签:数到,++,猴子,求猴,int,printf,大王,报数 来源: https://www.cnblogs.com/wmt657/p/15799357.html