- 问题描述:删除一段数中的n个数字,使得剩下数组成的数,值最小
- 算法思想:遇到一个递增的子序列,则删除最后的一个数字,若为递减的子序列则不断地覆盖第一个数字。
- 代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int n, a, i, k;
char s[200];
while(scanf("%s %d", s, &n) != EOF)
{
for(k = 1; k <= n; k++)
{
a = strlen(s);
i = 0;
while(i < a && s[i] <= s[i + 1])//字符串的最后一个是结束标志 它的Ascall 码值为 0
{
i++;
}
while(i < a)
{
s[i] = s[i + 1];// 若为升序,则将 最后一个 的Ascall 吗(结束符)赋给 前面 所以 a字符串的 长度减一
i++; //若为降序 则覆盖前面的数值
}
}
a = strlen(s);
i = 0;
while(i < a - 1 && s[i] == '0')
i++;
for(; i < a; i++)
{
printf("%c", s[i]);
}
printf("\n");
}
return 0;
}