删除数字

来源:互联网 发布:穿越火线数据异常36_2 编辑:程序博客网 时间:2024/06/05 20:12

删数问题

Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic Discuss

Problem Description

 键盘输入一个高精度的正整数n(≤100位),去掉其中任意s个数字后剩下的数字按照原来的左右次序组成一个新的正整数。编程对给定的n与s,寻找一种方案,使得剩下的数字组成的新数最小。

Input

  输入有多组 每组包括原始数n,要去掉的数字数s;

Output

 输出去掉s个数后最小的数

Example Input

178543  4

Example Output

13

Hint

每一步总是选择一个使剩下的数最小的数字删除,即按高位到低位的顺序搜索,若各位数字递增,则删除最后一个数字;否则删除第一个递减区间的首字符,这样删一位便形成了一个新的数字串。然后回到串首,按上述规则再删除下一个数字。

注意前导0的处理!!!比如10005 3 答案应该是0。2001 1答案应该是1。

#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;}


0 0
原创粉丝点击