删数问题
问题描述:给定n位正整数a,去掉其中任意k<=n个数字后,剩下的数字按原次序排列组成一个新的正整数,对于给定的n位正整数a和正整数k,设计一个算法找出剩下数字组成的新数最小的删数方案。
算法思想:用贪心算法解决,将n 位正整数看作字符串,当k(删数的大小)不为0时:遍历字符串,从第一个开始与它的下一个比较,如果大于下一个,就删除它,(即更新字符串),同时让k减一,进行下一轮删数。
代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char s[100];
scanf("%s",&s);
int i,j,n;
scanf("%d",&n);
while(n)
{
for( i=0;i<strlen(s);i++)
{
if(s[i]>=s[i+1])
{
for( j=i;j<strlen(s);j++)
{
s[j]=s[j+1];
}
n--;
break;
}
}
}
//打印删数完后的字符串
for(i=0;i<strlen(s)-n;i++)
{
printf("%c",s[i]);
}
}
运行截图: