您的位置:首页 > 其它

卡片游戏O(∩_∩)O

2015-07-17 20:48 585 查看
题目大意:

桌上有N(N<=50)张牌,从第一张开始(最上面的),从上往下依次编号为1~n。当至少还剩下两张牌时进行以下操作:把第一张牌扔掉,然后把新的第一张牌放到正堆牌的最后,输入每行包含一个n,输出每次扔掉的牌以及最后剩下的牌。

样例如下:

Sample Input
7
19
10
6
0
Sample Output
Discarded cards: 1, 3, 5, 7, 4, 2
Remaining card: 6
Discarded cards: 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 4, 8, 12, 16, 2, 10, 18, 14
Remaining card: 6
Discarded cards: 1, 3, 5, 7, 9, 2, 6, 10, 8
Remaining card: 4
Discarded cards: 1, 3, 5, 2, 6
Remaining card: 4

思路分析:

利用队列的知识,首先把1~N这几个数Push到队列中去,然后模拟题目描述的那样,删除第一个元素,把第二个元素放到牌堆底,直到剩下最后一张牌~~~中间也要注意一些问题,比如输出时不要多逗号,最后一行不要换行!!!!比赛时也要看清题目是否需要输出空格(简直不能再坑!/(ㄒoㄒ)/~~)

源代码:

#include<iostream>
#include<queue>
using namespace std;
int main()
{

int n;
while (cin >> n)
{
if (n > 1 && n <= 50)    //分情况讨论
{
queue<int>a;
for (int i = 1; i <= n; i++)
a.push(i);

cout << "Discarded cards: ";

while (a.size() >= 2)                //先判断再循环
{
if (a.size() == 2)
{
cout << a.front();
a.pop();
break;                         //处理输出最后一个元素
}
else
{
cout << a.front() << ", ";//输出当前第一张牌(即要扔掉的牌)
a.pop();                          //把第一张牌丢掉
a.push(a.front());            //把接下来的一张牌放入牌堆底
a.pop();                          //把当前的第一张牌扔掉
}
//n=a.size();

}

cout << endl;
cout << "Remaining card: " << a.front() << endl;

}
else if (n == 1)
{
cout << "Discarded cards:" << endl;
cout << "Remaining card: " << n << endl;

}

else
break;            //输入0是程序结束
}
//system("pause");
return 0;
}


心得:

开始本来vector写,结果不会~~~~(>_<)~~~~,然后用队列,中途各种问题,写出一道题也是如此坎坷,/(ㄒoㄒ)/~~

中间要先判断再循环,不然在输入1时可能就会出错,然后就是输出格式!!

引入:“要调整好心态啊,不然你会很苦恼的”

“沉下心,慢点来”

好好学吧O(∩_∩)O

还是不够努力啊。。。。

(虽然前面的路是黑暗+坎坷。。。。)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: