励志用少的代码做高效的表达
题目(提交)链接→UVa-10935
本题为水题,因此侧重点由解题转向优化。
思路:
最开始想到用string存储,利用插入,删除快速计算。
但却发现如果输入>=10的数,给string赋值就非常麻烦。
如:输入时我们要把11转化成"11",而输出是要把"11"再转化成11。
于是换了一个思路:用vector存储,同样可以实现插入、删除等 。
后知后觉:此题本质是模拟队列输出,STL_queue容器解题最佳。 当然,用vector效率相同。
注意:
n=1时 Discarded cards:也是输出的,冒号后没空格。(还是挺坑的。)
代码:
#include<bits/stdc++.h>
using namespace std;
int main() {
int n;
while((cin >> n) && n) {
vector<int>v; //声明a数组,赋0
for(int i = 1; i <= n; i++) v.push_back(i); //a数组赋值
cout << "Discarded cards:";
while(v.size() >= 2) {
(v.size()==2) ? cout<<' '<<v[0] : cout<<' '<<v[0]<<","; //若序列长=2则不输出逗号
v.erase(v.begin()); //删除v[0]
v.push_back(v[0]); v.erase(v.begin()); //v[1]放到序列后
}
cout << endl << "Remaining card: " << v[0] << endl;
}
return 0;
}