题目描述
输入一个高精度的正整数N,去掉其中任意S个数字后剩下的数字按原左右次序组成一个新的正整数。编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小。
输出新的正整数。(N不超过240位)输入数据均不需判错。
输入
输入n和s
输出
输出最后剩下的最小数。
样例输入 Copy
175438 4
样例输出 Copy
13
写答案之前,我觉得这个题目出的题意不够明确,比如如果我的数是109876,删掉四个数,按理来说答案应该是16,题目的意思是忽略0这个数,最后变成06,然后输出一个6,导致我一直过不了这个题目的测试点,所以我觉得题目里面应该需要注明一下,不考虑0的这种情况,下面给出我的贪心算法
#include<iostream>
#include<string>
using namespace std;
string t;
int c;
int main()
{
cin >> t;
cin >> c;
int j = 0;
for (int i = 0; i < c; i++)
{
for (j = 0; j < t.length(); j++)
{
if (j == t.length() - 1)
{
t.erase(j, 1);
--j;
break;
}
if (t[j] > t[j + 1])
{
t.erase(j, 1);
--j;
break;
}
}
}
int flag = 1;
//这里加一个flag是为了判断前面的0是否需要删除
//如果已经确定第一个不为0,那么不需要再判断是否有0会影响输出了
for (int i = 0; i < t.size(); i++)
{
if (t[i] == '0'&&i<t.size()-1&&flag==1)
{
continue;
}
else
{
cout << t[i];
flag = 0;
}
}
cout << endl;
return 0;
}