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;}