紫书刷题记录UVa10935 卡片游戏

蛮简单的模拟题,一开始想用递归,但看了下感觉不太好确定方程,再次读题发现就队列就能很好的模拟了,思路也很清晰:第一张卡片出队后第二张卡片插入到队尾;重复这个操作即可。这题PE了两三次,输入有点小坑,如果只有一张牌也要输出Discarded cards: 而且貌似每一行的最后一个输出后面不带空格= = 上代码:

#include
#include
#include
using namespace std;
int main()
{
	int n;
	while(cin>>n&&n)
	{
		queue<int>q;
		for(int i=1;i<=n;i++)
		q.push(i);//1,2,……n
		int res=n;//剩余牌数; 
		if(n!=1)
		cout<<"Discarded cards:";
		else
		cout<<"Discarded cards:"<<endl;
		while(!q.empty())
		{
			if(res>=2)
			{
				if(res==2)
				cout<<" "<<q.front()<<endl;
				else
				cout<<" "<<q.front()<<",";
				q.pop();//出队;
				int b=q.front();
				q.push(b);//放入队尾; 
				q.pop(); 
			}
			else
			{
				cout<<"Remaining card:";
				cout<<" "<<q.front()<<endl;
				q.pop();
			}
			res--;
		} 
	}
	return 0;
}

你可能感兴趣的:(紫书刷题记录,c++,c语言,算法)