删数问题sdut

Description

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

Input

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

Output

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

Sample

Input 

178543  4

Output 

13
这个题想法不是每次找到这个字符串里最大的删除,而是两两比较,两个数肯定保留小的那个放在前面,最后把0放在首位的情况排除就OK了
 1 #include<stdio.h>
 2 int main()
 3 {
 4     char a[1000];
 5     int s,i;
 6     while(~scanf("%s%d",a,&s))//多组输入
 7     {
 8         while(s--)
 9         {
10             i = 0;//初始化,很重要,而且是每次删数都要从第一个开始看
11             while(a[i]<=a[i+1])//找到一个前一项大与后一项的
12                 i++;
13             while(a[i]!='\0')//删除那个数
14             {
15                 a[i] = a[i+1];
16                 i++;
17             }
18         }
19         i = 0;//重新初始化用于输出
20         while(a[i] == '0')//这个是为了避免06这种数字输出
21         {
22            if(a[i+1]=='\0')//这个判断防止把所有的0都删除了最后输出不了比如3000删除2位,最后是输出应该是0
23             break;
24            else
25             i++;
26         }
27         puts(a+i);//输出
28     }
29     return 0;
30 }

 

posted @ 2020-06-06 23:44  爱写程序的机械师  阅读(199)  评论(0)    收藏  举报