2910: 删数问题
题目描述
键盘输入一个正整数N,去掉其中任意S个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小。(N不超过240位)
输入:两行,第一行:正整数n,第二行:正整数S。
输出:n去掉的s个数字后组成的新的正整数m。
样例:
输入:
123006
2
输出:
1006
#include<cmath>
#include<cstdio>
#include<cstring>
char n[511];
using namespace std;
int main()
{
int s,len;
scanf("%s%d",n+1,&s);
len=strlen(n+1);
n[len+1]='0';
while(s--)
{
for(int i=1;i<=len;i++)
{
if( (i==1 && n[2]=='0') || n[i+1]<n[i] )
{
for(int j=i;j<=len;j++) n[j]=n[j+1];
len--;
if(i==1)
{
int k=0;
while(n[k+1]=='0') k++;
for(int j=k;j<=len;j++) n[j-k]=n[j];
len-=k;
}
break;
}
}
}
len--;
if(len<=0) printf("0\n");
for(int i=1;i<=len+1;i++) printf("%c",n[i]);
return 0;
}