高精度整数去位去最小问题

Description
键盘输入一个高精度的正整数N,去掉其中任意M个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的N和M寻找一种方案使得剩下的数字组成的新数最小。输出组成的新的正整数。(不超过240位) 输入数据均不需判错。如果去掉了某几个位后得到的新整数开头为0,保留0。
Input
本题有多组测试数据,每组测试数据占一行。一个高精度正整数N(N不超过240位)一个正整数M。(M为不大于N的长度的正整数) N,M由一个空格分开。
Output
新的正整数,每组数据的输出占一行。不要多余的空白

Sample Input

456547 1
456547 2
103 1

Sample Output

45547
4547
03





主要运用贪心算法,每一位上的数字尽可能小就满足

#include<stdio.h>
#include<string.h>
void main()
{
char s[250];
int n;
while(scanf("%s %d",s,&n)!=EOF)
{
int i,k=strlen(s);
if(k==n){printf("0\n");continue;}
while(n)
{
int j=0;
for(i=0;i<k-1;i++)
if(s[i]>s[i+1])
{
for(j=i;j<k-1;j++)
s[j]=s[j+1];
k--;
j=-1;
break;
}
if(j!=-1)k--;
n--;
}
for(i=0;i<k;i++)printf("%c",s[i]);
printf("\n");
}
}

posted @ 2013-07-16 11:49  失眠的娃儿  阅读(206)  评论(0编辑  收藏  举报