解密类游戏--删除数字
题目描述
小BX正在玩一个解密类游戏,但是他遇到了一个难题,这里有一些数,想要进入到下一关的话,就需要从数K中删去要求的N个数字使剩下的数字组成的数最大,为了解决这个问题,小BX请你动用编程的力量为他解决这一难题。
输入
有多组测试数据。第一行有一个数T,表示有T组测试数据。接下来的T行,每一行有两个数K和N ( 0<= K <= 2^31 ,N小于K的位数)。
输出
对每一组数据输出删除若干数字后剩下的数字组成的那个最大数。
样例输入
1 917845 3
样例输出
985
解析
一开始参考网上代码,时间超限。
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int t, N;
string K;
int main()
{
cin >> t;
while (t--)
{
cin >> K >> N;
while (N > 0)//核心代码
{
int i = 0;
while (i < K.size() && K[i] >= K[i + 1])
{
i++;
K.erase(i, 1);
N--;
}
} //核心代码
cout << K << endl;
K.clear();
}
system("pause");
return 0;
}
后来改了一下,优化提速,得到
#include <iostream>
#include <string>
using namespace std;
int t, n;
string k;
int main()
{
cin >> t;
while (t--)
{
cin >> k >> n;
while (n--)
{
int flag = 0;
for (string::iterator i = k.begin(); i != (k.end() - 1); i++)
{
if (*i < *(i + 1))
{
flag = 1;
k.erase(i, 1);
break;
}
}
if (!flag)
k.pop_back();
}
cout << k << endl;
}
system("pause");
return 0;
}
转载请注明出处:https://www.cnblogs.com/stu-jyj3621

浙公网安备 33010602011771号