ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

7-1 报数 (10 分)输入两个正整数 n 和 m( (1<m<n<=50)),有 n 个人围成一圈,按顺序从 1 到 n 编号。从第一个人开始报数.......

2021-12-12 15:02:02  阅读:141  来源: 互联网

标签:10 int 圈子 scanf 50 编号 报数


7-1 报数 (10 分)

输入两个正整数 n 和 m( (1<m<n<=50)),有 n 个人围成一圈,按顺序从 1 到 n 编号。从第一个人开始报数,报数 m 的人退出圈子,下一个人从 1 开始重新报数,报数 m 的人退出圈子。如此循环,直到留下最后一个人。请按退出顺序输出退出圈子的人的编号,以及最后一个人的编号。

提示:将每个人的编号存入数组,从第一个人开始报数,输出报数 m 的人的编号,并将该编号清除为0,重复这样的操作直至只剩下一个不为0的数,该数就是最后一个人的编号。

输入输出示例:括号内为说明,无需输入输出

输入样例:

5               (n个人报数,n=5)
3               (报数m=3)

结尾无空行

输出样例:

No1: 3          (第1个退出圈子的人编号是3)
No2: 1	        (第2个退出圈子的人编号是1)
No3: 5	        (第3个退出圈子的人编号是5)
No4: 2	        (第4个退出圈子的人编号是2)
Last No is: 4   (最后一个人的编号是4)

结尾无空行

#include<stdio.h>
int main()
{
    int Arr[50] = { 0 }, m, n;
    scanf("%d\n", &m);
    scanf("%d", &n);
    for (int i = 1; i <= m; i++) {
        Arr[i] = 1;
    }
    int j = 1, flag = 0, No = 1;
    for (int i = 0; No < (m); i++) {
        if (Arr[j])flag++;
        if (flag == n) {
            Arr[j] = 0;
            flag = 0;
            printf("No%d: %d\n", No++, j);
        }        
        j++;
        if (j > m)j = 1;
    }
    for (int i = 0; i <= m; i++) {
        if (Arr[i]) {
            printf("Last No is: %d", i);
            break;
        }
    }
    return 0;
}

标签:10,int,圈子,scanf,50,编号,报数
来源: https://blog.csdn.net/Sunday_Cake/article/details/121884000

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有