删数问题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 }

浙公网安备 33010602011771号