Description
一个高精度的正整数n(≤240位),去掉其中任意s个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的n和s,寻找一种方案,使得剩下的数字组成的新数最小。(s<=n的位数)
Input
输入n和s。
Output
输出剩下的最小数。
Sample Input 

175438 4
Sample Output
13
n=175438 s=4 删数的过程如下:
n=175438 //删掉7
15438 //删掉5
1438 //删掉4
138 //删掉8
13 //解为13
即删掉第一个连续下降子区间的第一个字符即可,另外串首为零的情况要注意细节;
如果不存在这样的字符,就删除字符串中最大的字符(此时最大字符在字符串末尾)
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main(){
string a;
int s;
while(cin>>a>>s) {
int N=a.size();
int sign =0;
for(int i=1; i<=s; i++) //删除s个字符
{ for(int j=0; j<N-1; j++) //从首字符开始搜索直到最后第二个字符
{ if(a[j]>a[j+1]) //找到字符a[j];
{ sign++;
for(int k=j; k<N-1; k++) //将其删除
a[k]=a[k+1];
N--;
break;
}
}
}
int mark=0; //删除多余的首项0
for(int i=0; i<N-s+sign; i++)
{
if(a[i]=='0')
mark++;
else
break;
}
for(int i=mark; i<N-s+sign; i++)
cout<<a[i];
cout<<endl;
}
return 0;
}