首页 > 代码库 > 3528:最小新整数

3528:最小新整数

描述

给定一个十进制正整数n(0 < n < 1000000000),每个数位上数字均不为0。n的位数为m。
现在从m位中删除k位(0<k < m),求生成的新整数最小为多少?
例如: n = 9128456, k = 2, 则生成的新整数最小为12456

输入第一行t, 表示有t组数据;
接下来t行,每一行表示一组测试数据,每组测试数据包含两个数字n, k。输出t行,每行一个数字,表示从n中删除k位后得到的最小整数。样例输入

2
9128456 2
1444 3

样例输出

12456
1
 1 #include<stdio.h>
 2 #include<string.h>
 3 int main()
 4 {
 5     char a[10];
 6     int b[11],len,i,t,k,p,q;
 7     scanf("%d",&t);
 8     while(t--)
 9     {
10         memset(b,-1,sizeof(b));
11         scanf("%s %d",a,&k);
12         len=strlen(a);
13         for(i=1;i<=len;i++)
14             b[i]=a[i-1]-0;
15         for(p=1;p<=k;p++)
16             for(i=1;i<=len;i++)
17             {
18                 if(i==len)
19                 {
20                     len--;
21                     break;
22                 }
23                 if(b[i]>b[i+1])
24                 {
25                     for(q=i;q<len;q++)
26                         b[q]=b[q+1];
27                     len--;
28                     break;
29                 }
30             }
31         for(i=1;i<=len;i++)
32             if(b[i]>0)
33                 printf("%d",b[i]);
34         printf("\n");
35     }
36     return 0;
37 }
 1 //这个程序栈溢出,仅供参考
 2 #include<stdio.h>
 3 #include<string.h>
 4 int b[11];
 5 int i,j,mi,min;
 6 void m(int s,int z,int k)
 7 {
 8     if(k==0)    return ;
 9     else
10     {
11         min=10;
12         for(i=s;i<=z;i++)
13             if(b[i]<min&&b[i]!=-1)
14             {
15                 mi=i;min=b[i];
16             }
17         if(mi-s<=k)
18         {
19             for(i=s;i<mi;i++)
20                 b[i]=-1;
21             m(mi+1,z,k-mi+s);
22         }
23         else
24             m(s,mi-1,k);
25     }
26 }
27 int main()
28 {
29     char a[10];
30     int k,la,t;
31     scanf("%d",&t);
32     while(t)
33     {
34         memset(b,-1,sizeof(b));
35         scanf("%s %d",a,&k);
36         la=strlen(a);
37         for(i=0;i<la;i++)
38             b[i+1]=a[i]-0;
39         m(1,la,k);
40         for(i=1;i<=la;i++)
41             if(b[i]!=-1)    printf("%d",b[i]);
42         printf("\n");
43         t--;
44     }
45 }

 

3528:最小新整数