【题目描述】
给定一个十进制正整数n(0<n<1000000000),每个数位上数字均不为0。n的位数为m。
现在从m位中删除k位(0<k<m),求生成的新整数最小为多少?
例如: n=9128456,k=2,则生成的新整数最小为12456。
【输入】
第一行t, 表示有t组数据;
接下来t行,每一行表示一组测试数据,每组测试数据包含两个数字n,k。
【输出】
t行,每行一个数字,表示从n中删除k位后得到的最小整数。
【输入样例】
2
9128456 2
1444 3
【输出样例】
12456
1
算法:贪心
又异想天开,以为只要前面的数大于等于后面的数就要删掉,然后wa了,
eg:1112 2, 这就不行。
后来发现只要循环字符串,如果有前面大于后面就删除,诺循环完也没有,则删除最后一个,因为此时后面那个数一定是最大的。
#include <iostream>
using namespace std;
string s;
int main()
{
int T;
cin>>T;
while(T --)
{
int k;
cin>>s>>k;
int len = s.size();
for(int i=0; i<k; i++)
{
bool flag = true;
for(int j=0; j<s.size(); j++)
{
if(s[j] > s[j + 1])
{
s.erase(j,1);
flag = false;
break;
}
}
if(flag)
s.erase(s.size() - 1,1);
}
bool flag = false;
for(int i=0; i<s.size(); i++)
{
if(s[i] != '0')
{
flag = true;
}
if(flag && i != s.size() - 1)
cout<<s[i];
if(i == s.size() - 1) cout<<s[i]<<endl;
}
}
return 0;
}