【题解-洛谷】B4295 [蓝桥杯青少年组国赛 2022] 报数游戏

发布于:2025-06-02 ⋅ 阅读:(24) ⋅ 点赞:(0)

题目:B4295 [蓝桥杯青少年组国赛 2022] 报数游戏

题目描述

某班级男生人数为 X X X 人,女生人数为 Y Y Y 人,现全班同学围成一个圆圈,并按照顺时针方向为每名同学编号(从 1 1 1 X + Y X+Y X+Y)。现给出一个正整数 K K K 2 < K < ( X + Y ) 2<K<(X+Y) 2<K<(X+Y)),从编号为 1 1 1 的同学开始顺时针方向报数,报到 K K K 的同学退出圆圈,下一名同学继续从 1 1 1 报数,再次报到 K K K 的同学退出圆圈。如此循环,直到剩余人数为 X X X 时游戏结束。

请你计算出游戏开始时 X X X 名男生分别应该排在什么位置,才能保证每次离开的都是女生,游戏结束时剩余 X X X 人都是男生。并将游戏开始时每名男生的位置编号按照从小到大顺序输出。

例如: X = 5 X=5 X=5 Y = 3 Y=3 Y=3 K = 3 K=3 K=3 8 8 8 名同学按照如下图的顺序排列(蓝色为男生位置,红色为女生位置),可以使 3 3 3 轮报数过后最后剩余的 5 5 5 名同学都为男生。故 5 5 5 名男同学的编号分别为 2 2 2 4 4 4 5 5 5 7 7 7 8 8 8

输入格式

输入三个正整数 X X X Y Y Y K K K 3 ≤ X ≤ 100 3 \leq X \leq 100 3X100 3 ≤ Y ≤ 100 3 \leq Y \leq 100 3Y100 2 < K < ( X + Y ) 2 < K < (X+Y) 2<K<(X+Y)), X X X 表示男生人数, Y Y Y 表示女生人数, K K K 表示报数的关键数字,三个正整数之间以一个空格隔开。

输出格式

输出 X X X 个整数,表示每名男生位置编号按照从小到大的顺序排列,编号之间以一个空格隔开。

输入输出样例 #1

输入 #1

5 3 3

输出 #1

2 4 5 7 8

代码(10分)

#include<iostream>

using namespace std;

const int MaxXY = 200 + 10;

int X, Y, K;
int out[MaxXY];

int main(){
    cin >> X >> Y >> K;
    int nv = Y;
    int i = 1;
    while(nv --){
        int t = 1;
        while(t < K){
            // cout << "i: " << i << " out[i]: " << out[i] << endl;
            if(!out[i]){
                i = (i + 1) % (X + Y + 1);
                if(i == 0){
                    i ++;
                }
                t ++;
            }
            else{
                while(out[i]){
                    i = (i + 1) % (X + Y + 1);
                    if(i == 0){
                        i ++;
                    }
                }
                t ++;
            }
        }

        if(out[i]){
            while(out[i]){
                i = (i + 1) % (X + Y + 1);
                if(i == 0){
                    i ++;
                }
            }
        }

        // cout << "i: " << i << endl;
        out[i] = 1;
        i = (i + 1) % (X + Y + 1);
        if(i == 0){
            i ++;
        }
    }

    for(int i = 1; i <= (X + Y); i ++){
        if(!out[i]){
            cout << i << " ";
        }
    }
    return 0;
}

网站公告

今日签到

点亮在社区的每一天
去签到