HDU - 4550 卡片游戏

 1 #include<stdio.h>
 2 #include<string.h>
 3 int main()
 4 {
 5     int i,j,k,l,n,h,t,min,head,tail,num[1000];
 6     char a[1000];
 7     scanf("%d",&t);
 8     for(j=0;j<t;j++)
 9     {
10         scanf("%s",a);
11         n=strlen(a);
12         min=99999;
13         for(i=n-1;i>=0;i--)
14         {
15             if((a[i]!='0')&&(a[i]<min))
16             {
17                 min=a[i];
18                 h=i;
19             }
20         }//从右到左找到第一个非零最小数;
21         if(h==0)
22         {
23             printf("%s\n",a);
24             continue;
25         }//如果没有h之前的部分可以直接输出;
26         head=500;
27         tail=500;
28 //分别记录答案序列的头尾位置;
29         num[500]=a[0]-'0';
30         for(i=1;i<h;i++)
31         {
32             if(a[i]-'0'<=num[head])
33             {
34                 head--;
35                 num[head]=a[i]-'0';
36             }
37             else
38             {
39                 tail++;
40                 num[tail]=a[i]-'0';
41             }
42         }//先处理前h的部分
43         head--;
44         num[head]=a[h]-'0';//把第h个数字放在最前面
45         for(i=h+1;i<n;i++)
46         {
47             tail++;
48             num[tail]=a[i]-'0';
49         }//把h之后的部分接在后面;
50         for(i=head;i<=tail;i++)
51         {
52             printf("%d",num[i]);
53         }
54         printf("\n");
55     }
56 }
View Code

 

posted on 2017-02-22 21:22 NWU_ACM 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/NWUACM/p/6431069.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值