1057: 纸牌还原

1057: 纸牌还原

时间限制: 1 Sec  内存限制: 128 MB
提交: 10  解决: 8
[提交][状态][讨论版][命题人:13087216664]

题目描述

小明和小红在玩纸牌游戏,小明突然想到一种纸牌玩法:手上有13张牌点数为1~13叠放在一起;进行以下步骤:

1. 将顶上的第一张牌放到纸牌堆的下面;

2. 将顶上的第一张牌放在桌上。

3. 反复进行1、2步直到所有的牌都在桌上。

然后让小红说出这13张牌原来在手上的初始状态的顺序是什么,你能帮助她吗?

输入

给出这13张牌在桌上的顺序

输出

输出这13张牌在手上的初始顺序

样例输入

2 4 6 8 10 12 1 5 9 13 7 3 11

样例输出

1 2 3 4 5 6 7 8 9 10 11 12 13

来源

解题方法:假设下面13牌就是我们要的牌的初始顺序(现在只要填对数字就OK了),那么怎么填数字?

首先,将他们标上序号

             
 1           2        3       4        5       6       7        8      9       10     11     12     13(记为   初始序号)
然后按照题目要求排序,(得到的就是13张牌在桌子的顺序,也就是输入的那一串数字)
             

上面这几个格子里填的就是输入的数字了

 2          4        6        8     10     12      1        5        9      13      7        3      11(这是处理后序号,用于还原成  初始序号)

最后把数字填入格子里按照序号把它还原成   初始序号     所得的数字串,就是初始顺序

#include<stdio.h>

#define N 13

int main()

{

    int a[N+1]={0};

    int b[N+1];//N 张牌处理后的下标顺序

    int i=1,number=1,num=0;

    while(number!=N+1)//number已经处理的纸牌数量

    {

        if(!a[i])

        {

            num++;

           if(num%2==0)//第二张牌打出

           {

              b[number++]=i;

              a[i]=1;//排除

           }

        }

        i=i%13+1;

    }

    for(i=1;i<N+1;i++)

        scanf("%d",&a[(b[i])]);

    for(i=1;i<N+1;i++)

        printf("%d ",a[i]);

    printf("\n");

    return 0;

}

/**************************************************************

    Problem: 1057

    User: 201703120136

    Language: C

    Result: 正确

    Time:12 ms

    Memory:1092 kb

****************************************************************/

                         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值