山东理工OJ 2072 删数问题

http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2072

/*
题目描述:
    键盘输入一个高精度的正整数n(≤100位),去掉其中任意s个数字后剩下的数字按照原来的左右次序组成一个新的正整数。编程对给定的n与s,寻找一种方案,使得剩下的数字组成的新数最小。
    
输入:
    输入有多组 每组包括原始数n,要去掉的数字数s
输出:
    输出去掉s个数后最小的数
    
示例输入
178543  4
示例输出
13
*/

思路:
每一步总是选择一个使剩下的数最小的数字删除,即按高位到低位的顺序搜索,若各位数字递增,则删除最后一个数字;否则删除第一个递减区间的首字符,这样删一位便形成了一个新的数字串。然后回到串首,按上述规则再删除下一个数字。

注意前导0的处理!!!比如10005 3 答案应该是0。2001 1答案应该是1。

#include 
#include 
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




你可能感兴趣的:(ACM,基本算法---贪心)