当前位置:   article > 正文

[PTA]实验8-1-8 报数_pta报数

pta报数
Spring-_-Bear 的 CSDN 博客导航

报数游戏是这样的:有 n 个人围成一圈,按顺序从 1 到 n 编好号。从第一个人开始报数,报到 m(< n)的人退出圈子;下一个人从 1 开始报数,报到 m 的人退出圈子。如此下去,直到留下最后一个人。本题要求编写函数,给出每个人的退出顺序编号。

函数接口定义:

void CountOff( int n, int m, int out[] );
  • 1

其中 n 是初始人数;m 是游戏规定的退出位次(保证为小于 n 的正整数)。函数 CountOff 将每个人的退出顺序编号存在数组 out[] 中。因为 C 语言数组下标是从 0 开始的,所以第 i 个位置上的人是第 out[i-1] 个退出的。

裁判测试程序样例:

#include <stdio.h>
#define MAXN 20

void CountOff( int n, int m, int out[] );

int main()
{
    int out[MAXN], n, m;
    int i;

    scanf("%d %d", &n, &m);
    CountOff( n, m, out );   
    for ( i = 0; i < n; i++ )
        printf("%d ", out[i]);
    printf("\n");

    return 0;
}

/* 你的代码将被嵌在这里 */
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

输入样例:

11 3

输出样例:

4 10 1 7 5 2 11 9 3 6 8

来源:

来源:PTA | 程序设计类实验辅助教学平台
链接:https://pintia.cn/problem-sets/13/exam/problems/549

提交:

在这里插入图片描述

题解:

/*
 * 报数游戏:给出每个人的退出顺序编号
 */
void CountOff(int n, int m, int out[]) {
    // C 语言 C99 及以上标准支持 VLA,即使用变量定义数组大小
    int people[n];
    for (int i = 0; i < n; i++) {
        people[i] = i + 1;
    }

    int index = 0;
    int count = 0;
    // 报数 n 次,每次将出队的元素值修改为 -1
    for (int dequeue = 1; dequeue <= n; dequeue++) {
        // 一直报数,直到有人出队
        while (1) {
            // 循环报数
            index = index == n ? 0 : index;

            // 当前编号已出队,下一位
            if (people[index] == -1) {
                index++;
                continue;
            }

            // 报数
            count++;
            // 如果当前报数 count 为 m 则出队
            if (count == m) {
                // 出队
                people[index] = -1;
                // 记录当前编号的出队顺序
                out[index] = dequeue;
                // 重新计数
                count = 0;
                // 下一位
                index++;
                break;
            }

            index++;
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/285945
推荐阅读
相关标签
  

闽ICP备14008679号