Run ID:112154
提交时间:2025-03-08 15:15:52
#include <iostream> #include <vector> using namespace std; int main() { int N, M; // 读取第一行输入,N 表示总人数,M 表示初始报数的上限 cin >> N >> M; // 创建一个向量来存储每个人的密码 vector<int> passwords(N); // 读取第二行输入,将每个人的密码存储到向量中 for (int i = 0; i < N; ++i) { cin >> passwords[i]; } // 创建一个向量来标记每个人是否已经出列,初始都未出列,用 false 表示 vector<bool> isOut(N, false); // 记录当前报数的人的索引,初始从第一个人(索引为 0)开始 int currentIndex = 0; // 记录已经出列的人数,初始为 0 int outCount = 0; // 当出列的人数小于总人数时,继续进行报数和出列操作 while (outCount < N) { // 记录当前报数,初始为 0 int count = 0; // 开始报数,直到报数达到当前的 M 值 while (count < M) { // 如果当前的人还未出列 if (!isOut[currentIndex]) { // 报数加 1 count++; } // 如果报数达到了 M 值 if (count == M) { // 标记这个人已经出列 isOut[currentIndex] = true; // 输出这个人的密码 cout << passwords[currentIndex]; // 如果不是最后一个出列的人,输出一个空格分隔 if (outCount < N - 1) { cout << " "; } // 更新 M 值为这个人的密码 M = passwords[currentIndex]; // 出列人数加 1 outCount++; } // 移动到下一个人,使用取模运算确保索引在 0 到 N-1 之间循环 currentIndex = (currentIndex + 1) % N; } } return 0; }