题目描述
键盘输入一个高精度的正整数 N(不超过250 位),去掉其中任意 k 个数字后剩下的数字按原左右次序将组成一个新的非负整数。编程对给定的 N 和 k,寻找一种方案使得剩下的数字组成的新数最小。
输入格式
n(高精度的正整数 )。
k(需要删除的数字个数 )。
输出格式
最后剩下的最小数。
输入输出样例
输入 #1复制
175438 4
输出 #1复制
13
解题方法:贪心。
坑点:去除前导零。
Code:
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <vector>
using namespace std;
const int N = 1000010;
int n, m, x, k;
char str[N];
vector<int> v;
void delet(char str[], int l, int k)
{
while(k -- )
{
int i = 0;
while(i < l && str[i] <= str[i + 1]) i ++;
for(int j = i + 1; j < l; j ++ ) str[j - 1] = str[j];
}
}
signed main()
{
while(scanf("%s%d", str, &k) != EOF)
{
int m = k;
int l = strlen(str);
delet(str, l, k);
for(int i = l - m - 1; i >= 0; i -- ) v.push_back(str[i] - '0');
while(v.size() > 1 && v.back() == 0) v.pop_back();
for(int i = v.size() - 1; i >= 0; i -- ) cout << v[i];
cout << endl;
}
}