给定一个十进制正整数n(0 < n < 1000000000),每个数位上数字均不为0。n的位数为m。
现在从m位中删除k位(0<k < m),求生成的新整数最小为多少?
例如: n = 9128456, k = 2, 则生成的新整数最小为12456
Input
第一行t, 表示有t组数据;
接下来t行,每一行表示一组测试数据,每组测试数据包含两个数字n, k。
Output
t行,每行一个数字,表示从n中删除k位后得到的最小整数。
Sample Input
2 9128456 2 1444 3
Sample Output
12456 1
这道题一定要想明白思路,我原来用了很麻烦的办法,而且思路比较混乱。其实是一道贪心,求最优解,让前一个与后一个比较,如果大的话就把它后边的数整体向前移动,覆盖了它,数组总长度减一。如果前面的都比后边的小,那就直接数组长度减一,去掉最后一个。
代码如下:
Select Code
#include<stdio.h>
#include<string.h>
int main()
{
int t,i,j,k;
scanf("%d",&t);
while(t--)
{
char a[100010];
int n,l;
scanf("%s %d",a,&n);
l=strlen(a);
for(i=1;i<=n;i++)
{
for(j=0;j<l;j++)
{
if(a[j]>a[j+1])
{
for(k=j;k<l-1;k++)
{
a[k]=a[k+1];
}
break;
}
}
l--;
}
for(i=0;i<l;i++)
printf("%c",a[i]);
printf("\n");
}
return 0;
}