HDU 4841 圆桌问题 ( vector 的应用 / 模拟 )
题意:
2n 个人围坐在圆桌旁,有 n 个好人和 n 个坏人,从第一个开始数起,每次都除去第 m 个人,然后从下一个人开始数起,再到第 m 个人再除去,要求找出除去第 n 个人后剩下的全是好人。
想法:
一开始想用普通的数组解决的发现无法实现除去一个人人数减少缩短循环总数的问题。
用 vector 可以实现数组动态变化,大小自由增大减小。
先用 vector 放进每个人的位置编号,然后被除去的那个人,就把起编号去除,最后剩下的就都是好人的位置。
vector 里有的数字就都是好人的位置,其他的是坏人的位置,用循环判断输出即可得出答案。
需要注意的是格式要求。
code:
代码来自参考书
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,m;
vector<int>table;
while(cin >> n >> m){
table.clear();
for (int i = 0; i < 2 * n; ++i) {
table.push_back(i);
}