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了),那么怎么填数字?
首先,将他们标上序号
上面这几个格子里填的就是输入的数字了
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
****************************************************************/