题目:
键盘输入一个高精度的正整数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];
}
}