代码改变世界

卡片游戏

2016-12-14 20:39  HHFFZ  阅读(300)  评论(0编辑  收藏  举报
小明最近宅在家里无聊,于是他发明了一种有趣的游戏,游戏道具是N张叠在一起的卡片,每张卡片上都有一个数字,数字的范围是0~9,游戏规则如下:
  首先取最上方的卡片放到桌子上,然后每次取最上方的卡片,放到桌子上已有卡片序列的最右边或者最左边。当N张卡片全部都放到桌子上后,桌子上的N张卡片构成了一个数。这个数不能有前导0,也就是说最左边的卡片上的数字不能是0。游戏的目标是使这个数最小。
  现在你的任务是帮小明写段程序,求出这个最小数。
 

输入

第一行是一个数T,表示有T组测试数据;
然后下面有T行, 每行是一个只含有0~9的字符串,表示N张叠在一起的卡片,最左边的数字表示最上方的卡片。

[Technical Specification]
T<=1000
1 <= N <= 100
 

输出

对于每组测试数据,请在一行内输出能得到的最小数。
 

样例输入

3
565
9876543210
9876105432
#include<stdio.h>
#include<string.h>
int main()
{
    char a[100],b[100],c[100],d[10];
    char z,y,t;
    int n,m,i,j,k,p;
    scanf("%d",&n);
    gets(d);//为啥有这个呢  因为  回车键也算字符。
    while(n--)
    {
    k=1;p=1;
    gets(a);
    n=strlen(a);
    z=a[0];
    y=a[1];
    if(z>y)
    {
        t=z;
        z=y;//前面俩排序小的放左边,大的放右边。
        y=t;
    }
    b[0]=z;
    c[0]=y;
    for(i=2;i<n;i++)
    {
        if(a[i]=='0')//如果为0,不能放在第一位  需要和最左边的换换。
        {
            b[p]=z;
            b[p-1]=a[i];
            p++;
        }
        else
        {
            if(a[i]<=z)
            {
                b[p]=a[i];//和左边比较,小于左边  放在B数组里
                p++;
                z=a[i];
            }
            else
            {
                c[k]=a[i];//大于右边  放在C数组里。
                k++;
            }
        }
    }
    for(i=p-1;i>=0;i--)
    {
        printf("%c",b[i]);//先输出B 数组
    }
    for(i=0;i<k;i++)
    {
        printf("%c",c[i]);
    }
    }

}