题目:
键盘输入一个高精度的正整数n(<=240位),
去掉任意s个数字后剩下的数字按原左右次序将组成一个新的正整数。
编程对给定的n和s,寻找一种方案,使得剩下的数最小。
Simple Input
178543
4
Simple Output
13
删一个数使其剩下的数组成的正整数最小
12345,删五
13245,删三
我们发现,从高位到低位来循环,如果这个数递增,那么就删最后一个,如果这个数有递减区间,就把区间里第一个数删去这样的话会得到最小的正整数。
#include<iostream>
#include<cstring>
using namespace std;
int main(){char a[300];cin.getline(a,sizeof(a));int b,n,i;cin>>b;n=strlen(a);for(i=0;i<n;++i){if(a[i]!=-1&&a[i]>a[i+1]) {a[i]=-1;//用-1来标记被删掉的数b--;i=0; //一次删除,重新循环寻找递减区间}if(b==0) break;}if(b!=0){//如果递减数列数量不够,从后面找相应数量删掉for(i=n-1;;++i){if(a[i]!=-1){a[i]=-1;b--;}if(b==0) break;}}for(i=0;i<n;++i){if(a[i]!=-1) cout<<a[i];}
}