题目描述
键盘输入一个高精度的正整数 N(不超过 250 位),去掉其中任意 k 个数字后剩下的数字按原左右次序将组成一个新的非负整数。编程对给定的 N 和k,寻找一种方案使得剩下的数字组成的新数最小。
输入格式
n(高精度的正整数 )。
k(需要删除的数字个数 )。
输出格式
最后剩下的最小数。
输入输出样例
输入 #1
175438
4
输出 #1
13
思路
贪心题,用字符串来存储n。然后两层循环枚举,i从1到k,j从1到s.length()。如果s[j]>s[j+1],就删掉s[j]并且break。
难点
删数的函数,string类型自带s.erase(a,b)。
表示以下标为a的字符开始向右删数,一共删b个数。
易错点
删除前导0,并且如果结果为0要保留一个0。
code
#include<bits/stdc++.h>
using namespace std;
int main()
{
int k,len;//定义长度和k
string s;//字符串
cin>>s;//输入
cin>>k;//输入
len=s.length();//len存储字符串长度
for(int i=1;i<=k;i++)//循环
{
for(int j=0;j<=len-1;j++)//循环
{
if(s[j]>s[j+1])//判断
{
s.erase(j,1);//删数
break;//删完之后退出循环
}
}
}
while(s[0]=='0'&&s.length()>1) s.erase(0,1);//删除前导0
cout<<s;//输出最后的字符串
return 0;
}