zoukankan      html  css  js  c++  java
  • 卡片游戏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
  • 相关阅读:
    c#,winform,progressbar+labe,联动显示进度 Virus
    答某刘
    Expert .NET 2.0 IL Assembler·一校日记 (2)
    IL 二校汇总
    历史的思考(1)
    酝酿中,写一本《你不知道的IL》
    Expert .NET 2.0 IL Assembler·一校日记
    一校 疑难汇总
    强签名
    [转] 《解剖PetShop》系列之三
  • 原文地址:https://www.cnblogs.com/Lynn0814/p/4655648.html
Copyright © 2011-2022 走看看