贪心——删数问题
题目描述
键盘输入一个高精度的正整数 N(不超过 250 位) ,去掉其中任意 k 个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的 N 和 k,寻找一种方案使得剩下的数字组成的新数最小。
输入格式
n (高精度的正整数)
k (需要删除的数字个数)
输出格式
最后剩下的最小数。
输入输出样例
输入样例
175438
4
输出样例
13
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
int k,t,n;
cin>>s>>k;
t=k;
n=s.length();
while(t--){
for(int i=0;i<n-1;i++){ // 如果前一个数比后一个数大,则删除前一个数
if(s[i]>s[i+1]){
for(int j=i;j<n;j++){
s[j]=s[j+1];
}
n--;
break;
}
}
}
while(s.length()-n<k){ // 当删除个数不够时,需要从后往前删除
s[n-1]=s[n];
n--;
}
int m=0;
while(s[m]=='0'){ // 删除最前面的 0
m++;
}
if(m==n) // 如果没有数了,则输出 0
cout<<0<<endl;
for(int i=m;i<n;i++){
cout<<s[i];
}
cout<<endl;
return 0;
}