ACM卡片游戏

10935 Throwing cards away

I Given is an ordered deck of n cards numbered 1 to n with card 1 at the top and card n at the bottom. The following operation is performed as long as there are at least two cards in the deck: Throw away the top card and move the card that is now on the top of the deck to the bottom of the deck. Your task is to find the sequence of discarded cards and the last, remaining card.

Input

Each line of input (except the last) contains a number n ≤ 50. The last line contains ‘0’ and this line should not be processed.

Output

For each number from the input produce two lines of output. The first line presents the sequence of discarded cards, the second line reports the last remaining card. No line will have leading or trailing spaces. See the sample for the expected format.

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

解题思路:我们首先输入一个x,来确定我们需要给定的牌数和我们的牌的上面的数字。然后我们将我们每次输入的数都用push_back()存到一个set容器中

(建立一个set容器,需要我们用到<map>这个头文件)我们在我们的牌还剩大于1时才进行扔牌的操作。用front()函数将第一个数输出来,再把pop()函数删除第一个数,用front()函数将第一个数取出,再用push()函数把它插入到容器的后面,同时用pop函数删除这个数。最后我们要将容器中剩下的那个数据清除掉。(我们要注意我们的输出形式)

#include <iostream>
#include <queue>
using namespace std;
queue<int>v;
int main()
{
    int x;
    while(cin>>x&&x)
    {
        for(int i=0;i<x;i++)
            v.push(i+1);
        cout<<"Discarded cards:";
        while(v.size()>1)
        {

            if(v.size()>2)
                cout<<" "<<v.front()<<",";
            else
                cout<<" "<<v.front();
            v.pop();
             v.push(v.front());
            v.pop();
        }
        cout<<endl;
        cout<<"Remaining card:"<<" "<<v.front()<<endl;
        v.pop();
    }
    return 0;
}程序代码:
时间: 2024-10-12 02:51:34

ACM卡片游戏的相关文章

【sicily】卡片游戏

卡片游戏  Time Limit: 1sec    Memory Limit:32MB Description 桌上有一叠牌,从第一张牌(即位于顶面的牌)开始从上往下依次编号为1~n.当至少还剩两张牌时进行以下操作:把第一张牌扔掉,然后把新的第一张放到整叠牌的最后.输入n,输出每次扔掉的牌,以及最后剩下的牌. Input 第一行为一个整数t(0<t<40),表示测试用例个数.以下t行每行包含一个整数n(0<n<40),为一个测试用例的牌数. Output 为每个测试用例单独输出一行

NYOJ 905 卡片游戏

卡片游戏 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 小明最近宅在家里无聊,于是他发明了一种有趣的游戏,游戏道具是N张叠在一起的卡片,每张卡片上都有一个数字,数字的范围是0~9,游戏规则如下: 首先取最上方的卡片放到桌子上,然后每次取最上方的卡片,放到桌子上已有卡片序列的最右边或者最左边.当N张卡片全部都放到桌子上后,桌子上的N张卡片构成了一个数.这个数不能有前导0,也就是说最左边的卡片上的数字不能是0.游戏的目标是使这个数最小. 现在你的任务是帮小明写段程序,

Sicily 1931. 卡片游戏

题目地址:1931. 卡片游戏 思路: 纯属数据结构中队列的应用,可以练练手. 具体代码如下: 1 #include <iostream> 2 #include <queue> 3 using namespace std; 4 5 int main() { 6 int t; 7 cin >> t; 8 while (t--) { 9 int num; 10 cin >> num; 11 queue<int> store; 12 for (int

测试4T2 卡片游戏

问题 E: 卡片游戏 时间限制: 1 Sec  内存限制: 128 MB提交: 42  解决: 18[提交][状态][讨论版] 题目描述 小D举办了元旦联欢活动,其中有一个卡片游戏. 游戏的规则是这样的:有n张卡片,每张卡片上正面写着一个小于等于100的正整数ai,反面都是一样的花色.这n张卡片正面朝下叠成一堆,玩这个游戏的人从中可以抽出连续的k(1≤k≤n)张卡片.如果对于这k张卡片上的数字的平均值a,满足l<=a<=r,那他就可以获得小礼物一件. 小W来玩这个游戏了,她事先通过某些途径知道

1704 卡片游戏

1704 卡片游戏  时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题目描述 Description 桌面上有一叠牌,从第一张牌(即位于顶面的牌)开始从上往下依次编号为1~n.当至少还剩两张排时进行一下操作:把第一张牌扔掉,然后把新的第一张牌放到整叠牌的最后.输入n.输出每次扔掉的牌,以及最后剩下的牌.. 输入描述 Input Description 输入n 输出描述 Output Description 输出每次扔掉的牌,以及最后剩下的牌 样例输入 Sa

卡片游戏 (关于队列)

一.原题 桌上有一叠牌,从第一张牌(即位于顶面的牌)开始从上往下依次编号为1~n.当至少还剩两张牌时进行以下操作:把第一张牌扔掉,然后把新的第一张放到整叠牌的最后.输入n,输出每次扔掉的牌,以及最后剩下的牌. 样例输入:7 样例输出:1 3 5 7 4 2 6 二.题目源代码 #include<cstdio> #include<queue> using namespace std; queue<int> q; int main() { int n; scanf(&quo

1.cocos2dx记忆卡片游戏代码、并将游戏移植到“华为荣耀”手机上、移植中的问题总结

 1记忆卡片游戏代码 CardItem.h #pragmaonce #ifndef__CardItem_H__ #define__CardItem_H__ #include"cocos2d.h" USING_NS_CC; classCardItem :publicCCSprite { public: staticCardItem *create(intidx); boolinit(intidx); CCLabelTTF *ttf; CCSprite *bg; CC_SYNTHESI

卡片游戏(队列)

#include<iostream> #include<queue> using namespace std; queue<int>q; int main() { int n; cin>>n; for(int i=1;i<=n;i++) q.push(i); while(!q.empty()) { cout<<q.front()<<' '; q.pop(); if(!q.empty()) { q.push(q.front());

HDU ACM 4550 卡片游戏

分析:分为三部分处理,第一部分找到除0外最靠右的最小数字A作为第一位:第二部分是这个最小数字A前面的数字均按规则排列,也就是每取出一张大的放在第二部分的后面,小的放在第二部分的前面:第三部分就是这个最小数A后面的数字按原顺序放在最后即可:最终即可组出新的串. 例子:9876105432. 第一部分:1 第二部分:9876,处理后为6789 第三部分:05432 最后按照第一部分,第二部分,第三部分的顺序组出新串:1678905432既是最终结果. #include<iostream> usin