17行代码AC——例题5-3 卡片游戏(Throwing cards away I, UVa 10935)——解题报告

励志用少的代码做高效的表达


题目(提交)链接→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;
}

拨云见日,未来可期。

发布了80 篇原创文章 · 获赞 73 · 访问量 7231

猜你喜欢

转载自blog.csdn.net/weixin_43899069/article/details/104769743
今日推荐