贪心A 删数问题

来源:互联网 发布:nginx 二级域名转发 编辑:程序博客网 时间:2024/06/05 17:39

Problem Description
键盘输入一个高精度的正整数n(≤100位)用字符串输入,去掉其中任意s个数字后剩下的数字按照原来的左右次序组成一个新的正整数。编程对给定的n与s,寻找一种方案,使得剩下的数字组成的新数最小。最优解!贪心
Input
输入有多组 每组包括原始数n,要去掉的数字数s;
Output
输出去掉s个数后最小的数
Example Input
178543 4
Example Output
13

#include <stdio.h>#include <string.h>int main(){    int i,s,len=0;    char a[100];    while(~scanf("%s",a))    {        len=strlen(a);        scanf("%d",&s);        while(s>0)        {            i=0;       while(i<len&&a[i]<=a[i+1]) //如果各位数字是递增的,删除最后一位数字                i++;            while(i<len)            {                a[i]=a[i+1];  //后面的串向前移:删除!!                i++;            }            s--;              //删除的次数        }        len=strlen(a);    //删完之后的长度        int n=0;          //位数        if(a[0]=='0')   //删完之后首位是0        {            while(a[n]=='0')            {                      //从首位到n位都是0                n++;            }            if(n==len)                printf("0");        //都为0            for(i=n; i<len; i++)           printf("%c",a[i]);  //n位之后不为0,则不输出0,直接输出后面的            printf("\n");        }        else          //删完之后首位不为0        {            printf("%s\n",a);        }    }    return 0;}
原创粉丝点击