查找最大元素
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;
}