2489: 【普及/提高-】【P1106】删数问题
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:8
解决:3
题目描述
键盘输入一个高精度的正整数 (不超过 位),去掉其中任意 个数字后剩下的数字按原左右次序将组成一个新的非负整数。编程对给定的 和 ,寻找一种方案使得剩下的数字组成的新数最小。
输入
输入两行正整数。
第一行输入一个高精度的正整数 。
第二行输入一个正整数 ,表示需要删除的数字个数。
输出
输出一个整数,最后剩下的最小数。
样例输入 复制
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; }