题目描述
键盘输入一个高精度的正整数NN(不超过250250位) ,去掉其中任意kk个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的NN和kk,寻找一种方案使得剩下的数字组成的新数最小。
输入格式
nn (高精度的正整数)
kk(需要删除的数字个数)
输出格式
最后剩下的最小数。
输入输出样例
输入 #1
175438 4
输出 #1
13
思路:从前往后枚举,删除上升子串的最后一位。也就是如果s[i]>s[i+1],那么就删除s[i];
由于删除操作比较麻烦,可以采用第i+1到n位向前移一位的方式。
还要考虑前导0的问题。
#include<iostream> #include<string> using namespace std; int main() { string s; int k; cin >> s; cin >> k; int k1=k; int q; while(k--) { int flag=0; for(int i=0; i<s.size(); i++) { if(s[i]>s[i+1]) { q=i; flag=1; break; } } if(flag) { for(int i=q; i<s.size(); i++) { s[i]=s[i+1]; } } } int num=0; while(num<s.size()-k1&&s[num]=='0') num++; if(num==s.size()-k1) cout << 0 << endl; else { for(int i=num;i<s.size()-k1;i++) cout << s[i]; cout << endl; } return 0; }