先写上两个错误的代码
第一个
#include <stdio.h>
int main (void)
{
int n;
int a[n]; //** n未输入就用来创造数组,未初始化的n是一个很大的数,会导致爆栈,所以程序直接终止**
int i,t;
scanf("%d",&n);
for (i = 0; i < n; ++i)
{
scanf("%d",&a[i]);
}
for (i = 0; i < n - 1; ++i)
{
if (a[0] < a[i + 1])
{
t = a[i + 1];
a[i + 1] = a[0];
a[0] = t;
}
}
for (i = 1; i < n - 1; ++i)
{
if (a[1] < a[i + 1])
{
t = a[i + 1];
a[i + 1] = a[1];
a[1] = t;
}
}
printf("%d\n",a[1]);
return 0;
}
第二个
#include <stdio.h>
int main (void)
{
int n,T;
scanf("%d",&T);//此处的错误,在于逗号输入为中文的QAQ,改为英文的就行了
while(T)
{
scanf("%d",&n);
int a[n];
int i,t;
for (i = 0; i < n; ++i)
{
scanf("%d",&a[i]);
}
for (i = 0; i < n - 1; ++i)
{
if (a[0] < a[i + 1])
{
t = a[i + 1];
a[i + 1] = a[0];
a[0] = t;
}
}
for (i = 1; i < n - 1; ++i)
{
if (a[1] < a[i + 1])
{
t = a[i + 1];
a[i + 1] = a[1];
a[1] = t;
}
}
printf("%d\n",a[1]);
--T;
}
return 0;
}
问题要求
输入的第一行为一个数T,表示测试用例的个数。 每组测试用例包括两行,第一行为一个数N(2<=N<=10000),表示该组测试用例的数据个数。 第二行为N个整数,表示这一组测试数据。
Output
对于每组测试用例,输出一个数,为这组数据中第二大的数。
Sample Input
2
2
1 2
5
2 3 1 4 4
Sample Output
1
4
思考
这个程序的算法能否优化
是否能用函数