2489: 【例】【普及/提高-】【P1106】删数问题
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:14
解决:5
题目描述
键盘输入一个高精度的正整数 (不超过 位),去掉其中任意 个数字后剩下的数字按原左右次序将组成一个新的非负整数。编程对给定的 和 ,寻找一种方案使得剩下的数字组成的新数最小。
输入
输入两行正整数。
第一行输入一个高精度的正整数 。
第二行输入一个正整数 ,表示需要删除的数字个数。
输出
输出一个整数,最后剩下的最小数。
样例输入 复制
175438
4
样例输出 复制
13
提示
#include<bits/stdc++.h>
using namespace std;
int main(){
string s,ans="";
int k;
cin>>s>>k;
int l=s.length();
int m=l-k; //生成字符串长度
int p=0; //当前已生成字符串长度
int i=0; //当前已选字符下标
while (ans.length()<m){
int j,t=i;
for (j=i;j<=l-m+p;j++) {
if (s[j]<s[t])
t=j; //最小字符下标
}
ans+=s[t];
i=t;
i++;
p++;
}
int idx=0;
while (ans[idx]=='0') idx++;
if (idx!=0 && ans!="0")
ans=ans.substr(idx);
cout<<ans<<endl;
return 0;
}