对于一个n位正整数a,去掉其中任意k(k<=n)个数字后,剩下的数字按原次序排列可以组成一个新的正整数。设计一个删数算法,使得剩下的数字组成的正整数最小。例如,a=13243221,k=5,输出:121。
贪心策略:
遍历发现第一个非递增的值就把这个值删掉,如32,3可以删除,留下剩下的。
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
int main()
{
char* x = new char[100];
int k;
cin >> x;
cin >> k;
cout << "x的长度为:" <<strlen(x)<< endl;
int resLen = strlen(x) - k;
char* res = new char[100];
cout << resLen << endl;
int cnt = 0;
while (1)
{
for (int i = 0; i < strlen(x); i++)
{
if (i==strlen(x)-1||x[i] < x[i + 1])
{
res[cnt++] = x[i];
}
else
{
k--;
continue;
}
}
if (cnt == resLen)
break;
for (int i = 0; i < cnt; i++)
{
x[i] = res[i];
}
cnt = 0;
}
for (int i = 0; i < resLen; i++)
{
cout << res[i];
}
return 0;
}