2107 : 程序改错 - 变量初始化
时间限制: 1 Sec 内存限制: 128 MB
题目描述
题目:求一组不重复的正整数的次大值,即去掉最大值之后的最大值
输入:多组数据,每组数据包括一个正整数n和n个正整数,2<=n<=10
输出:每组数据一行,输出次大值的下标和值
代码如下,请修正后提交:
#include <stdio.h>
void find_2nd_max(int a[], int n)
{
int max_i, max_2nd_i;
int max = a[0] > a[1] ? a[0] : a[1];
int max_2nd = a[0] > a[1] ? a[1] : a[0];
int i;
for (i = 2; i < n; i++)
{
if (a[i] > max)
{
max_2nd = max;
max_2nd_i = max_i;
max = a[i];
max_i = i;
}
else if (a[i] > max_2nd)
{
max_2nd = a[i];
max_2nd_i = i;
}
}
printf("%d %d\n", max_2nd_i, max_2nd);
}
int main()
{
int a[10], n, i;
while (scanf("%d", &n) != EOF)
{
for (i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
find_2nd_max(a, n);
}
return 0;
}
输入
多组数据,每组数据包括一个正整数n和n个正整数,2<=n<=10
输出
每组数据一行,输出次大值的下标和值
样例输入
5 1 2 3 4 5
样例输出
3 4
提示
来源
ajeyone
AC代码
#include <stdio.h>
void find_2nd_max(int a[], int n)
{
int max_i, max_2nd_i;
int max = a[0] > a[1] ? a[0] : a[1];
int max_2nd = a[0] > a[1] ? a[1] : a[0];
int i;
max_i=a[0] > a[1] ? 0 : 1;
max_2nd_i=a[0] > a[1] ? 1 : 0;
for (i = 2; i < n; i++)
{
if (a[i] > max)
{
max_2nd = max;
max_2nd_i = max_i;
max = a[i];
max_i = i;
}
else if (a[i] > max_2nd)
{
max_2nd = a[i];
max_2nd_i = i;
}
}
printf("%d %d\n", max_2nd_i, max_2nd);
}
int main()
{
int a[10], n, i;
while (scanf("%d", &n) != EOF)
{
for (i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
find_2nd_max(a, n);
}
return 0;
}
原代码中函数中未将max_i 值和 max_2nd_i值初始化。