卡片游戏O(∩_∩)O

题目大意:

桌上有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ㄒ)/~~)

源代码:

 1 #include<iostream>
 2 #include<queue>
 3 using namespace std;
 4 int main()
 5 {
 6 
 7     int n;
 8     while (cin >> n)
 9     {
10         if (n > 1 && n <= 50)    //分情况讨论
11         {
12             queue<int>a;
13             for (int i = 1; i <= n; i++)
14                 a.push(i);
15 
16             cout << "Discarded cards: ";
17 
18             while (a.size() >= 2)                //先判断再循环
19             {
20                 if (a.size() == 2)
21                 {
22                     cout << a.front();
23                     a.pop();
24                     break;                         //处理输出最后一个元素
25                 }
26                 else
27                 {
28                     cout << a.front() << ", ";//输出当前第一张牌(即要扔掉的牌)
29                     a.pop();                          //把第一张牌丢掉
30                     a.push(a.front());            //把接下来的一张牌放入牌堆底
31                     a.pop();                          //把当前的第一张牌扔掉
32                 }
33                 //n=a.size();
34 
35 
36             }
37 
38             cout << endl;
39             cout << "Remaining card: " << a.front() << endl;
40 
41         }
42         else if (n == 1)
43         {
44             cout << "Discarded cards:" << endl;
45             cout << "Remaining card: " << n << endl;
46 
47         }
48 
49         else
50             break;            //输入0是程序结束
51     }
52       //system("pause");
53       return 0;
54     }

心得:

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

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

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

         “沉下心,慢点来”

好好学吧O(∩_∩)O

还是不够努力啊。。。。

(虽然前面的路是黑暗+坎坷。。。。)

     

------------------------ 没有谁的人生不是斩棘前行 ---------------------------------------- JM
原文地址:https://www.cnblogs.com/Lynn0814/p/4655648.html