本文主要是介绍HDU 1276 士兵队列训练问题 (链表和list),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
代码
我的代码:
#include <bits/stdc++.h>
using namespace std;
int main ()
{int N,n;cin>>N;vector <int> people;while (N--){cin>>n;people.clear();for (int i=1; i<=n; i++)people.push_back(i);int i=2;while(n>3){for (int j=i; j<=n; j+=i){people.erase(people.begin()+j-1);j--;n--;}if (i==2) i=3;else i=2;}for (int i=0; i<people.size(); i++){cout<<people[i];if (i!=people.size()-1) cout<<" ";else cout<<endl;}}return 0;
}
老师的代码
理解
老师的方法是运用了list来做,我的方法就是运用了vector作为容器,i++循环,每次报到2/3的人就删除,然后总数-1,依次循环直到总人数<=3。
老师的方法和我的方法其实基本差不多,他是用了指针,通过求余等于0来判断是否报到2/3,报到就erase删除,没报到就it++指向下一个数。不过显然老师的方法比我的更快捷。
这篇关于HDU 1276 士兵队列训练问题 (链表和list)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!