贪心算法删数问题



删数问题

给定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
贪心算法删数问题_第1张图片
运行截图

你可能感兴趣的:(贪心算法删数问题)