删数问题定义
有一个长度为n的正整数,从中取出k(k < n)个数,使剩余的数保持原来的次序不变,求这个正整数经过删数之后最小是多少。
输入格式:n和k
输出格式:一个数字,表示这个正整数经过删数之后的最小值。
代码实现:
#include<stdio.h>
#include<string.h>
char s[50],temp[50];
int main()
{
int k,num=0;
printf("请输入你的原始字符串:");
scanf("%s",s);
printf("请输入你要删除的位数:");
scanf("%d",&k);
int n=strlen(s);
int j;
while(num<k)
{
int i;
//用于打印每一步的删除结果
printf("%s\n",s);
for(i=0; i<n-num; i++)
{
if(s[i]>s[i+1])//第一个递减区间
{
j=i+1;
break;
}
else
temp[i]=s[i];//数字串递增,复制给temp
}
for(; j<n-num; j++)//跳过第一个递增区间的第一个元素复制
temp[i++]=s[j];
num++;// 若是数字串为递增num++时n-num判断时相当于删除了最后一个元素
memset(s,'\0',sizeof(s));
strcpy(s,temp);//此时s为删除后的数字串
memset(temp,'\0',sizeof(temp));
}
printf("删除%d位数之后的最小数为:",&k);
printf("%s\n",s);
return 0;
}