• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
大佬和我做朋友吧
博客园    首页    新随笔    联系   管理    订阅  订阅
求猴大王

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]);
}

 

posted on 2022-01-13 19:21  想和大佬做朋友  阅读(85)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3