贪心-寻找最大数

                                                                                 典型的贪心

描述

请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大,

比如当n=92081346718538,m=10时,则新的最大数是9888

 

输入
第一行输入一个正整数T,表示有T组测试数据
每组测试数据占一行,每行有两个数n,m(n可能是一个很大的整数,但其位数不超过100位,并且保证数据首位非0,m小于整数n的位数)
输出
每组测试数据的输出占一行,输出剩余的数字按原次序组成的最大新数
样例输入
2
92081346718538 10
1008908 5
样例输出
9888

98

分析:这道题主要走出一个误区,就是这段字符串中最大的数不一定是输出的数中的第一位,在前m位中,最大的数才是输出的第一位,进而,从第一位后面找到m+1这中间最大的数是输出的第二位,以此类推找到剩下的数。

下面的是代码,自行理解。//用两个for循环也可以。

#include<stdio.h>
#include<string.h>
char a[105];
int main()
{
    int t,m;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%s %d",a,&m);
        int len=strlen(a);
        char max='0';
        int k=0,f=0;
        while(m<len)
        {
            max='0';
            for(int i=k; i<=m; i++)
            {
                if(a[i]>max)
                {
                    max=a[i];
                    f=i;
                }
            }
            k=f+1;
            m++;
            printf("%d",max-'0');
        }
        printf("\n");
    }
}

猜你喜欢

转载自blog.csdn.net/qq_41129854/article/details/78939262