删数问题
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
给定n 位(n≤100)正整数a,去掉其中任意k≤n 个数字后,剩下的数字按原次序排列组成一个新的正整数。对于给定的n 位正整数a和正整数k,设计一个算法找出剩下数字组成的新数最小的删数方案。
对于给定的正整数a,计算删去k 个数字后得到的最小数。
对于给定的正整数a,计算删去k 个数字后得到的最小数。
输入
输入数据的第1 行是1 个正整数a。第2 行是正整数k。
输出
将计算出的最小数输出。
示例输入
178543 4
示例输出
13
思路:对于给定的一串数字,每次删除第一个左边大于右边的数字,若完全升序则删除最后一个数字,删除K次即可。输出结果的时候注意去掉前导0(这是个坑)
#include <iostream>
#include <algorithm>
#include <string.h>
#include <cstdio>
#include <cctype>
#include <cmath>
#include <string>
#include <vector>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
int k,i,flag;
string n;
while(cin>>n>>k)
{
vector <char> s(n.begin(),n.end());
while(k--)
{
vector <char>::iterator j=s.begin();
i=0;
while(i!=s.size()-1)
{
flag=1;
if(s[i]>s[i+1])
{s.erase(j);flag=0;break;}
i++;j++;
}
if(flag)
s.erase(j);
}
for(i=0;i<s.size();i++)
if(s[i]!='0')break;
while(i!=s.size())
cout<<s[i++];
cout<<endl;
}
return 0;
}