python贪心算法求删数问题_贪心算法删数问题

删数问题

给定n位正整数a,去掉其中任意k个数字后,剩下的数字按原次序排列组成一个新的正整数。对于给定的n和k,设计一个算法,找出剩下数字组成的新数最少的删数方案。

输入示例: 178543 4

输出: 13

输入示例: 56317 3

输出: 17

分析:

每一步总是选择一个使剩下的数最小的数字删除。

即按高位到低位的顺序搜索,若各位数字递增,则删除最后一个数字;否则删除第一个递减区间的首字符。

删除之后,其他数字往前移动一位,填补位置。

最后把剩下的几个数字,组成一个整数。

#include

#include

int main()

{

int a,n,k; //n指a有多少位

int i,j,s=1;

scanf("%d",&a); //a为输入的整数

scanf("%d",&k); //删去k个数字

n=log10(a)+1;

int p[n];

j=a;

for(i=n-1;i>=0;i--){ //数组p中从0到n-1,分别为:5 6 3 1 7

p[i]=j%10;

j/=10;

}

for(i=1;i<=k;i++){ //控制删去的个数

for(j=0;j

if(p[j]

continue;

}else{ //如果递减,删除第一个数

p[j]=-1;

break;

}

}

for(j=0;j

if(p[j]==-1){ //都往前挪

p[j]=p[j+1];

p[j+1]=-1;

}

}

}

for(i=0;i

printf("%d",p[i]);

}

return 0;

}

运行截图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值