【贪心】删数问题
题目描述
输入一个高精度的正整数n(≤240位),去掉其中任意s个数字后,剩下的数字按原左右次序组成一个新的正整数。编程对给定的n和s,寻找一种方案,使得剩下的数字组成的新数最小。
输入
第1行:一个正整数n;
第2行:s(s<n的位数).
输出
最后剩下的最小数。
样例输入
复制样例数据
175438
4
样例输出
13
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
#define N 300
int main()
{
char s[N];
scanf("%s",s);
int n,i;
scanf("%d",&n);
int len=strlen(s);
if(len==n)
{
printf("0\n");
return 0;
}
else
{
int t=n;
while(n--)
{
i=0;
while(i<len&&s[i]<=s[i+1]) i++;//找到递增的最大的数,进行删除
while(i<len) s[i]=s[i+1],i++;//删除把后面的值往前推,最后只打印前面的值
}
i=0;
if(s[i]=='0')
{
while(s[i]=='0')
i++;
}
if(i==len-t) // 输出可能首位为0,此时值为0;
printf("0");
for(int j=i;j<len-t;j++)
{
printf("%c",s[j]);
}
}
return 0;
}