题目描述
有M个人,其编号分别为1-M。这M个人按顺序排成一个圈。现在给定一个数N从第一个人开始依次报数数到N的人出列然后又从下一个人开始又从1开始依次报数数到N的人又出列如此循环,直到最后一个人出列为止。
输入
输入只有一行,包括2个整数M(8 <= M <= 15 ),N( 5 <= N <= 32767 )。之间用一个空格分开。
输出
输出M行,每行一个整数。
#include<bits/stdc++.h>
using namespace std;
bool a[20];
int main(){
int n,m,t=0;
cin>>m>>n;
for(int i=1;i<=m;i++){
if(!a[i])t++;
if(i==n){
cout<<i<<endl;
a[i]=1;
t=0;}
if(t==m)i=0;
}
return 0;
}
【以下回答由 GPT 生成】
改进之后的代码如下:
#include <iostream>
#include <vector>
using namespace std;
int main(){
int m, n;
cin >> m >> n;
// 创建一个vector来表示所有人的编号
vector<int> people;
for(int i = 1; i <= m; i++){
people.push_back(i);
}
// 循环报数并出列
int index = 0; // 当前指向的人的索引
while(people.size() > 0){
index = (index + n - 1) % people.size(); // 计算报数到N的人的索引
cout << people[index] << endl;
people.erase(people.begin() + index); // 将该人从vector中删除
}
return 0;
}
改进之处:
【相关推荐】
别的不说,人数减少后m也要减少,你这里没有体现出来,