删数
时间限制(普通/Java):1000MS/2000MS 运行内存限制:65536KByte
总提交:80 测试通过:3
描述
键盘输入一个正整数n(>=2位,<=100位),去掉其中的任意s(s < n的位数)个数字后使剩下的数字按照原来的次序组成一个新的正整数,编程对于给定的n和s,寻找一种方案,使得组成的新的正整数最小。
输入
输入有多组数据,每组数据包括原来的正整数n和删掉的位数s
输出
输出题目要求的最小正整数,要求输出前导零。
样例输入
16234 3
样例输出
12
**思路:注意前导0,和输出0的情况重叠
贪心策略:每次删去有高位到低位递增区间的末尾或者递减区间的首位,实现局部贪心**
代码:
#include <stdio.h>
#include <string.h>
int main()
{
char a[105];
int n,i,j,t,len;
while(scanf("%s %d",a,&n)!=EOF)
{
len=strlen(a);
t=n;
if(n>=len)
{
printf("0\n");
continue;
}
while(n>0)
{
i=0;
while(i<len&&a[i]<=a[i+1])
i++;
for(j=i;j<len;j++)
a[j]=a[j+1];
n--;
}
i=0;
if(a[0]=='0')
{
while(a[i]=='0')
i++;
}
if(i==len-t)
printf("0");
for(j=i;j<len-t;j++)
printf("%c",a[j]);
printf("\n");
}
return 0;
}