HDU2025 查找最大元素【入门】

查找最大元素

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 63900    Accepted Submission(s): 34037


Problem Description
对于输入的每个字符串,查找其中的最大字母,在该字母后面插入字符串“(max)”。
 

Input
输入数据包括多个测试实例,每个实例由一行长度不超过100的字符串组成,字符串仅由大小写字母构成。
 

Output
对于每个测试实例输出一行字符串,输出的结果是插入字符串“(max)”后的结果,如果存在多个最大的字母,就在每一个最大字母后面都插入"(max)"。
 

Sample Input
abcdefgfedcba xxxxx
 

Sample Output
abcdefg(max)fedcba x(max)x(max)x(max)x(max)x(max)
 

Author
lcy
 

Source

问题链接HDU2025 查找最大元素

问题简述参见上文。

问题分析

  这个问题的关键是开始不知道字符串中的哪个字符最大,所以需要先看一遍字符串。知道最大字符之后,对字符串再过一遍即可,该插入字符串“(max)”的地方,插入即可。实在想不出有更好的算法,也许这就是最好的算法。

程序说明

  对于这个题,不用指针来做,就不够专业。用字符数组和字符串函数来做,只能算入门级别的做法。

  做这个程序几次AC没过,问题出在没有每次都把变量max初始化上,好在有高人指点。看似简单的问题,吃亏往往在细节上。

  这里给出了两种实现方法,一是使用指针,二是使用数组。


AC的C语言程序如下(数组):

 

/* HDU2025 查找最大元素 */

#include <stdio.h>

#define N 100
char s[N +1];

int main(void)
{
    char max;
    int i;

    while(scanf("%s", s) != EOF) {
        max = '\0';

        // 查找最大字符
        for(i=0; s[i]; i++)
            if(s[i] > max)
                max = s[i];

        // 输出
        for(i=0; s[i]; i++) {
            printf("%c", s[i]);
            if(s[i] == max)       // 最大字符则插入(max)
                printf("(max)");
        }
        printf("\n");
    }

    return 0;
}


AC的C语言程序如下(指针):

/* HDU2025 查找最大元素 */

#include <stdio.h>

int main(void)
{
    char s[100+1], max, *t;

    while(scanf("%s", s) != EOF) {
        max='\0';

        // 查找最大字符
        t = s;
        while(*t) {
            if(*t > max)
                max = *t;
            t++;
        }

        // 输出
        t = s;
        while(*t) {
            printf("%c", *t);
            if(*t == max)       // 最大字符则插入(max)
                printf("(max)");
            t++;
        }
        printf("\n");
    }

    return 0;
}


阅读更多 登录后自动展开
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页