题目描述
键盘输入一个高精度的正整数N,去掉其中任意k个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的N和k,寻找一种方案使得剩下的数字组成的新数最小。
输出应包括所去掉的数字的位置和组成的新的整数。(N不超过250位) 输入数据均不需判错。
输入输出格式
输入格式:
n (高精度的正整数)
k(需要删除的数字个数)
输出格式:
最后剩下的最小数。
输入输出样例
输入样例#1: 复制
175438
4
输出样例#1: 复制
13
*******每次遇到一个比他后一位大的数就把他删除,然后,后面的数向前移,注意前面是零的要把他删除,遇到结果就是0的要特判一下
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<cmath> 5 using namespace std; 6 int i,j,l,u = 1,w,op = 0,a[255],k; 7 char s[255]; 8 int main() 9 { 10 scanf("%s",s); 11 l = strlen(s); 12 scanf("%d",&k); 13 w = k; 14 for(i = 1;i <= l;i++) 15 { 16 a[i] = s[i - 1] - '0'; 17 } 18 a[l + 1] = 0; 19 while(k > 0) 20 { 21 k--; 22 for(i = 1;i <= l;i++) 23 { 24 25 if(a[i] > a[i + 1]) 26 { 27 for(j = i;j <= l;j++) 28 { 29 a[j] = a[j + 1]; 30 } 31 break; 32 } 33 } 34 } 35 op = 1; 36 while(a[op] == 0 && op != l - w) 37 { 38 op++; 39 } 40 if(op == l - w) 41 { 42 printf("0"); 43 } 44 else 45 { 46 for(i = op;i <= l - w;i++) 47 { 48 printf("%d",a[i]); 49 } 50 } 51 return 0; 52 }