7楼算法也很好!看来是高手啊。
程序代码:
#include<stdio.h>
#include<string.h>
#define MAX_LENGTH 240
void main()
{
char s[MAX_LENGTH+1],res[MAX_LENGTH+1]; /*res保存运行结果*/
char *pOut=res; /*pOut用于输出,因为最后要过滤高位的0*/
int count,i=0,j=0;
scanf("%s%d",s,&count);
if((unsigned)count>strlen(s))
{
printf("You can\'t delete %d numbers from this string which contains only %d numbers!\n",count,strlen(s));
return;
}
else if((unsigned)count==strlen(s))
{
printf("0\n");
return;
}
while(count)
{
while(s[i]<=s[i+1]) /*如果是升序,将s直接拷贝到res,直到遇到降序*/
res[j++]=s[i++];
i++; /*遇到降序则跳过一个字符*/
count--; /*表示成功删除一个*/
res[j]=s[i++];
while(res[j]<res[j-1]&&count) /*删掉一个书之后,往回找比下一个数大的*/
{
res[j-1]=res[j]; /*从res中删掉新产生的降序数字*/
j--;
count--;
}
i--; /*i要重新指向已拷贝的有效字符的下一个位置,要将前一个字符重新判断*/
}
while((unsigned)i<strlen(s))/*若删降序时,已经删满所需数量,把s余下的部分拷贝到res中*/
res[j++]=s[i++];
while(count)
{
j--;
count--;
} /*如果还没删够,则从末尾开始删去字符*/
res[j]='\0';
while(*pOut=='0')
pOut++; /*过滤高位的0*/
if(strlen(pOut)==0) /*删完之后只剩0的情况*/
printf("0\n");
else
printf("%s\n",pOut);
}