题意翻译
n 个孩子在玩一个游戏。 孩子们站成一圈,按照顺时针顺序分别被标号为 1 到 n。开始游戏时,第一个孩子成为领导。 游戏进行 k 轮。 在第 i 轮中,领导会从他顺时针方向下一个孩子开始数 ai 个孩子。最后数到的那个孩子出局,再下一个孩子成为新的领导。
举个例子, 现在圈内还剩 [8, 10, 13, 14, 16]5个孩子,领导编号为 13 , ai = 12。那么出局的孩子为 16 。第 8 个孩子成为下一个领导。
你需要写一个代码模拟这个过程,求出每轮比赛出局的孩子。
第一行包含两个整数 n 和 k (2 ≤ n ≤ 100, 1 ≤ k ≤ n - 1).
第二行包含 k 个整数 a1, a2, ..., ak (1 ≤ ai ≤ 109).
输出 k 个整数,第 i 个整数表示第 i轮出局的孩子。
一开始做这道题也是有点懵,后面学习到了vector的用法,一下子很简单了!
#include <iostream>
#include <vector>
#include <cstdio>
using namespace std;
int main()
{
int n,k,t = 0;
cin >>n>>k;
vector<int> a(n);//定义vector数组
int str[100], ans[100];
for(int i=0;i<n;++i)
{
a[i]=i+1;
}
for(int i=0;i<k;++i)
{
cin>>str[i];
}
for(int i=0;i<k;++i)
{
t = (t+str[i])%(n-i);
ans[i]=a[t];
a.erase(a.begin()+t);
}
for(int i=0; i<k;++i)
{
cout<<ans[i] << " ";
}
cout << endl;
return 0;
这道题主要需要掌握vector动态数组中删除某个元素的用法。
a.erase(a.begin(),a.last())
ok!这道题难度不高,鼓励自己学习更好的方法。