卡片游戏
2016-12-14 20:39 HHFFZ 阅读(346) 评论(0) 编辑 收藏 举报小明最近宅在家里无聊,于是他发明了一种有趣的游戏,游戏道具是N张叠在一起的卡片,每张卡片上都有一个数字,数字的范围是0~9,游戏规则如下:
首先取最上方的卡片放到桌子上,然后每次取最上方的卡片,放到桌子上已有卡片序列的最右边或者最左边。当N张卡片全部都放到桌子上后,桌子上的N张卡片构成了一个数。这个数不能有前导0,也就是说最左边的卡片上的数字不能是0。游戏的目标是使这个数最小。
现在你的任务是帮小明写段程序,求出这个最小数。
首先取最上方的卡片放到桌子上,然后每次取最上方的卡片,放到桌子上已有卡片序列的最右边或者最左边。当N张卡片全部都放到桌子上后,桌子上的N张卡片构成了一个数。这个数不能有前导0,也就是说最左边的卡片上的数字不能是0。游戏的目标是使这个数最小。
现在你的任务是帮小明写段程序,求出这个最小数。
输入
第一行是一个数T,表示有T组测试数据;
然后下面有T行, 每行是一个只含有0~9的字符串,表示N张叠在一起的卡片,最左边的数字表示最上方的卡片。
[Technical Specification]
T<=1000
1 <= N <= 100
然后下面有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]); } } }