删数
时间限制(普通/Java):1000MS/2000MS 运行内存限制:65536KByte
总提交:80 测试通过:3
总提交:80 测试通过:3
描述
键盘输入一个正整数n(>=2位,<=100位),去掉其中的任意s(s < n的位数)个数字后使剩下的数字按照原来的次序组成一个新的正整数,编程对于给定的n和s,寻找一种方案,使得组成的新的正整数最小。
输入
输入有多组数据,每组数据包括原来的正整数n和删掉的位数s
输出
输出题目要求的最小正整数,要求输出前导零。
样例输入
16234 3
样例输出
12
考虑只删一个数的情况,最优解是删除出现的第一个左边>右边的数,因为删除之后高位减小,很容易想...那全局最优解也就是这个了,因为删除S个数字就相当于执行了S次删除一个数,因为留下的数总是当前最优解...贪心吧
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
int main()
{
string a;
int c;
while(cin>>a>>c)
{
a=a+char('0'-1);
while(c--)
{
for(int i=0;i<=a.size()-2;++i)
if(a[i]>a[i+1])
{
a.erase(a.begin()+i);
break;
}
}
a.erase(a.end()-1); //删除
cout<<a<<endl;
}
return 0;
}