卡片游戏

卡片游戏

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 2867    Accepted Submission(s): 884


 

Problem Description

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

 

 

Input

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

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

 

 

Output

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

 

 

Sample Input

3

565

9876543210

9876105432

 

 

Sample Output

556

1234567890

1678905432

 

 

Source

2013金山西山居创意游戏程序挑战赛——初赛(2)

 

#include<iostream>
#include<string>
using namespace std;
/*思路:
1.手动查找字符串中非0且最小的字符,记下位置j
2.当i<j,从第二个起如果小于等于前一个,就加在前面(此时设最小值为str[0]),
以此类推,与前一个比较
3.当i==j,直接加到最前面
4.当i>j,后面不动,(自己想想就知)
*/
int main()
{
    int t,i,j;
    char minn;
    string str;
    cin>>t;
    while(t--)
    {
        cin>>str;
        minn='9';
        for(i=0; i<str.size(); i++)
        {
            if(str[i]!='0' && str[i]<=minn)
            {
                minn=str[i];
                j=i;
            }
        }
        string ans;
        ans=str[0];
        for(i=1; i<str.size(); i++)
        {
            if(i<j)
            {
                if(str[i]>ans[0])
                    ans=ans+str[i];
                else
                    ans=str[i]+ans;
            }
            else if(i==j)
            {
                ans=str[i]+ans;
            }
            else
            {
                ans=ans+str[i];
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值