报数游戏
描述
n个人围成一圈(编号为1 - n),从第1个人开始报数,报到k的人出列,后面的人重新从1开始报数。问最后剩下的人的编号。
例如:n = 3,k = 2。2号先出列,然后是1号,最后剩下的是3号。
输入
输入为单组测试数据。
输入2个数n和k,表示n个人,数到k出列。(2 <= n, k <= 200)
输出
输出一个整数表示最后剩下的人的编号。
思路:
使用vector 容器;关键公式:pos=(pos+m-1)%a.size();
#include<bits/stdc++.h>
using namespace std;
vector <int> a;
int main()
{
int n,m;
cin>>n>>m;
a.clear(); //清空容器
for(int i=1;i<=n;i++){
a.push_back(i); //初始化赋值
}
int pos=0;
for(int i=1;i<=n-1;i++){
pos=(pos+m-1)%a.size(); //圆桌是个环,取余处理
a.erase(a.begin()+pos); //使数到K的人出列,按人数-1
}
cout<<a.front()<<endl; //输出最后一个人的编号
return 0;
}