删数问题
Time Limit: 1000MS
Memory Limit: 65536KB
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 ,len ,n; char s[110]; while(scanf("%s %d",s,&n)!=EOF) { while(n) { len = strlen(s); i = 0; while(i<len&&s[i]<=s[i+1]) 递增到递减的数字 i++; while(i<len) { s[i] = s[i+1]; 删去这个数字 i++; } n--; } while(s[0]=='0') { while(i<len) { s[i]= s[i+1]; 全部删除完之后讨论前面缀有零的情况 i++; } i = 0; } if(s[0]=='\0') 如果都是零 且都删除完了 '\0'就是字符串结束的标志 printf("0\n"); else printf("%s\n",s); 没有删除完就输出 } return 0; }