HDU 3183 A Magic Lamp

题意: 从长度为 n 的数字中去掉k个数字,问剩下的数字组成的数最小是多少。

分析:可以看成从原来的数字中找一个长度为n-k的子串并且最小。 

        每次从第 st 个位置到第k+top个位置中找到最小的一个数字

        st 为上次找到的数子的后一位,top为当前已经找到的数字个数。

#include <stdio.h>
#include <string.h>
int main()
{
    char s[1005];
    int  res[1005];
    int i, j, k;
    while(scanf("%s%d",s,&k)!=EOF)
    {
        int n = strlen(s);
        int top = 0;
        int st = 0;
        int en = k+top;
        int tt = 0;
        int g;
        while(top<n-k)
        {
            int tmp = 9;
            for(i = en; i >= st; i--)
            {
                if(s[i]-'0'<=tmp)
                {
                      tmp = s[i]-'0';
                    g = i;        
                }
            }
            res[top++] = tmp;
            st = g+1;
            en = k+top;
        }
        int flag = 0;
        for(i = 0; i < top ; i++)
        {
            if(flag || res[i]!=0){
                printf("%d",res[i]);
                flag = 1;
            }
        }
        if(flag == 0)
            printf("0");
        printf("\n");
    }
    return 0;
}

 

posted @ 2012-10-13 13:02  'wind  阅读(212)  评论(0编辑  收藏  举报