最小新整数-贪心

给定一个十进制正整数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;
}
发布了30 篇原创文章 · 获赞 1 · 访问量 224

猜你喜欢

转载自blog.csdn.net/weixin_46204099/article/details/105349773
今日推荐