贪心之删数字

删数

时间限制(普通/Java):1000MS/2000MS 运行内存限制:65536KByte
总提交:80 测试通过:3
描述

键盘输入一个正整数n(>=2位,<=100位),去掉其中的任意s(s < n的位数)个数字后使剩下的数字按照原来的次序组成一个新的正整数,编程对于给定的n和s,寻找一种方案,使得组成的新的正整数最小。

输入

输入有多组数据,每组数据包括原来的正整数n和删掉的位数s

输出

输出题目要求的最小正整数,要求输出前导零。

样例输入

16234 3

样例输出

12

**思路:注意前导0,和输出0的情况重叠
贪心策略:每次删去有高位到低位递增区间的末尾或者递减区间的首位,实现局部贪心**

代码:

#include <stdio.h>
#include <string.h>
int main()
{
    char a[105];
    int n,i,j,t,len;
    while(scanf("%s %d",a,&n)!=EOF)
    {
        len=strlen(a);
        t=n;
        if(n>=len)
        {
            printf("0\n");
            continue;
        }
        while(n>0)
        {
            i=0;
            while(i<len&&a[i]<=a[i+1])
                i++;
            for(j=i;j<len;j++)
                a[j]=a[j+1];
            n--;
        }
        i=0;
        if(a[0]=='0')
        {
            while(a[i]=='0')
                i++;
        }
        if(i==len-t)
            printf("0");
        for(j=i;j<len-t;j++)
            printf("%c",a[j]);
        printf("\n");
    }
    return 0;
}
阅读更多

没有更多推荐了,返回首页