问题描述:
在给定的n个数字的数字串中,删除其中k(k<n)个数字后,剩下的数字按原次序组成一个新的正整数。请确定删除方案,使得剩下的数字组成的新正整数最大。例如在整数79502867154829179316中删除8个数字后,所得最大整数为多大?
# include <iostream>
# include <vector>
using namespace std;
string fun(string number, int k)
{
vector<int> v1;
for(char c : number)
{
/*这个一个整体的代码的意思就是,遍历number这个很长的数字,首先存到
v1这个数组当中,如果v1的最后一个元素小于正在遍历的字符c的话,那么此时的v1最后
一个字符就要删除,此时把最新的字符c存到v1当中去。*/
while(!v1.empty() && v1.back() < c && k > 0)
{
v1.pop_back();
k--;
}
v1.push_back(c);
}
while(k > 0) //如果上面的for遍历了k的值还大于0,那么就是说后面的元素一定是小于前面的,此时只用删除后面的就行。删除到k=0的时候停止。
{
v1.pop_back();
k--;
}
string result;
for(char c : v1) //这个模块就是把v1里面的各个字符串全部整合在一个变量当中。
{
result += c;
}
return result;
}
int main()
{
string number;
int k;
cout<<"输入数字:";
cin>>number;
cout<<"输入要删除几个数字:";
cin>>k;
string number1 = fun(number, k);
cout<<"最终结果数字的最大值是:"<<number1;
return 0;
}
这种数字很大很大的,一般来说就不适用于int --- long --- long long这些类型的变量了。这种就需要用字符串来解出这个题目 。
382

被折叠的 条评论
为什么被折叠?



