8只猴子围坐成一个圈,
按顺时针方向从1到8编号。
然后从1号猴子开始
沿顺时针方向从1开始报数,
报到m的猴子出局,
再从刚出局猴子的下一个位置重新开始报数,
如此重复,直至剩下一个猴子,
它就是大王。
设计并编写程序,实现如下功能:
- 给出当选猴王的编号。
- 要求由用户输入报的数m。
#include <stdio.h>
int main(int argc, const char *argv[])
{
int i;
int a[100] = { 0 };
int all_num = 8;//猴子总数
int start_num = 2;//从几号猴子开始 下标1
int kill_num = 4;//数到几杀死猴
printf("请您输入猴子总数 从几开始 数到几出局:\n");
scanf("%d%d%d",&all_num,&start_num,&kill_num);
for(i = 0; i < all_num; i++)
a[i] = i+1;
//1.先确定第一个被杀死猴子的下标
int out = (start_num+kill_num-2)%all_num;//out即将出局猴子对应的下标
//2.循环杀猴
while(a[1] != 0)
{
printf("monkey --->%d out!!\n",a[out]);
for(i = out; i < all_num; i++)
{
a[i] = a[i+1];
}
all_num--;
out = (out+kill_num-1)%all_num;//继续找下一个被杀猴子的下标
}
//3.打印猴王
printf("monkey king is %d!!\n",a[0]);
return 0;
}