题目:
给定一个十进制的正整数number,选择从里面去掉一部分数字,希望保留下来的数字组成的正整数最大。输入:
输入为两行内容,
第一行是正整数number,1 ≤ length(number) ≤ 50000。
第二行是希望去掉的数字数量cnt 1 ≤ cnt < length(number)。
//这是本题的简单思路:
#include <bits/stdc++.h>
using namespace std;
//结果显示
void Print(int Flag,vector<int> V2)
{
if(Flag)
{
for(int i=0;i<V2.size();i++)
cout<<V2[i];
}
else
cout<<" "<<endl;
}
int main()
{
int number,cnt,k=1,flag=0;
cin>>number>>cnt;
vector<int> V1;
vector<int> V2;
//想办法让number按照原始顺序输出 到V2中
while(number)
{
V1.push_back(number%10);
number/=10;
}
vector<int>::reverse_iterator r_iter;
for (r_iter = V1.rbegin();r_iter != V1.rend();++r_iter)
{
V2.push_back(*r_iter);
}
//从左向右,每次删除小于下一位的数
vector<int>::iterator it;
if(cnt==V2.size())
{
for (it = V2.begin();it != V2.end();it++)
{
V2.erase(it);
}
flag=0;
}
else
{
int t=0;
while(k<=cnt)
{
for(int p=0;p<V2.size()-1;p++)
{
if(V2[p]<V2[p+1])
{
t=V2[p];
break;
}
}
for (it = V2.begin();it != V2.end();it++)
{
if(*it==t)
{
V2.erase(it);
break;
}
}
k++;
}
flag=1;
}
//结果打印
Print(flag,V2);
}
/*
输出展示:
5648231 4 对应输出:831
过程:
k=1 648231
k=2 68231
k=3 8231
k=4 831
程序缺陷:
当number过大时,程序无法满足 ,根据题目要求,case通过率是20%,应考虑用字符数组来做
*/