版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
Description
面对任意一个整数,如果我们需要删除掉其中的几位,怎样才能保证输出的数值最小呢?
Input
输入的第一行包含一个正整数,数字的总位数不超过1000位;第二行包含一个正整数n。表示要从第一行的数值中删除n位数字(0 < n < 1000)
Output
输出从输入的数值中删掉n位后能够产生的最小整数
注意结果不能有前置的零。
Sample Input
1372123
3
Sample Output
1123
HINT
这道题有一个规律,就是从这个数的左边起,一个一个去找,若找到的数小于前面的数,就将前面的数删除,例如样例:
次数 | 得出的数 |
---|---|
0 | 1372123 |
1 | 132123//2小于7,所以删掉7 |
2 | 12123//2小于3,所以删掉3 |
3 | 1123//1小于2,所以删掉2 |
就是这么个规律,下面看代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
char n[1001];
int s,len;
cin>>n>>s;
len=strlen(n);
for(int k=1;k<=s;k++)
{
for(int j=0;j<len;j++)
{
if(n[j+1]<n[j])
{
for(int i=j;i<=len;i++)
{
n[i]=n[i+1];
}
len--;
break;
}
}
}
bool flag=false;
for(int i=0;i<len;i++)
{
if(n[i]!='0')flag=true;
if(flag)cout<<n[i];
}
return 0;
}