贪心算法—删数问题

来源:互联网 发布:社交软件排行 编辑:程序博客网 时间:2024/06/05 02:17

给定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;}