您的位置:首页 > 其它

贪心算法—删数问题

2013-06-28 17:24 148 查看
给定n位正整数a,去掉其中任意k≤n 个数字后,剩下的数字按原次序排列组成一个新的正整数。对于给定的n位正整数a 和正整数k,设计一个算法找出剩下数字组成的新数最小的删数方案。

算法的原理应该是说从最高位开始,一次向低位搜索,一旦遇到前一位(高位)的数大于当前位,则删去前一位,直到删除k个数,如果到达末尾还没有删除k个,则说明现在这个数已经是从小到大排序了,则从最低位开始删除要求的位数。

#include <stdio.h>
#include <string.h>

int main()
{
char a[20];
int k;
printf("输入正整数:\n");
scanf("%s",a);
printf("输入k值:\n");
scanf("%d",&k);
int len = strlen(a);
while(k--)
{
int i=0,j;
while(i<len-1 && a[i]<=a[i+1])
{
i++;
}
if(i==len-1)//表示字符串是递增的
{
len--;
while(k--)
len--;
break;
}
else
{
for(j=i;j<len-1;j++)
a[j]=a[j+1];
len--;
}
}
printf("最小值为:\n");
int l;
for(l=0;l<len;l++)
printf("%c",a[l]);
printf("\n");
return 0;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: