C语言题目,求大神帮忙 25

冠军总是常常受人关注的,可亚军也不错啊,现在我们也来关注一下他。给出一列整数,求出其中的第二大值,在这里冠军只有一个,也就是当有两个最大值时,只有第一个最大值才是冠军,第... 冠军总是常常受人关注的,可亚军也不错啊,现在我们也来关注一下他。给出一列整数,求出其中的第二大值,在这里冠军只有一个,也就是当有两个最大值时,只有第一个最大值才是冠军,第二个最大值只能是亚军。输入的第一行为一个数T,表示测试用例的个数。 每组测试用例包括两行,第一行为一个数N(2<=N<=10000),表示该组测试用例的数据个数。 第二行为N个整数,表示这一组测试数据。对于每组测试用例,输出一个数,为这组数据中第二大的数。 展开
 我来答
侠义南宫天诺
2016-10-23 · TA获得超过415个赞
知道小有建树答主
回答量:349
采纳率:56%
帮助的人:166万
展开全部
#include <stdio.h>
void sort(int a[10000],int M){
int t;
for(int i=0;i<M-1;i++)
{

for(int j=0;j<M-1;j++){
if(a[j]<a[j+1]){
t=a[j+1];
a[j+1]=a[j];
a[j]=t;
}
}

}
}
int main()
{
int j,i,a[10000],N,M,re[10000];
scanf("%d",&N);
for(i=0;i<N;i++){
scanf("%d",&M);
for(j=0;j<M;j++){
scanf("%d",&a[j]);
sort(a,M);
re[i]=a[1];

}
} for(i=0;i<N;i++)
printf("%d\n",re[i]);
return 0;
}

用了数组,效率可能不会太高。。但是代码没问题

#include <stdio.h>
int main()
{
int j,i,T,N,t,re[10000],submax,max;
scanf("%d",&T);
for(i=0;i<T;i++){
scanf("%d",&N);
scanf("%d",&submax);
max=submax;
for(j=1;j<N;j++){
scanf("%d",&t);
if(t>max){
submax=max;
max=t;
}else if(t>submax)
submax=t;

}
re[i]=submax;;
}

for(i=0;i<T;i++)
printf("%d\n",re[i]);
return 0;
}
又写了一个更好的,这个效率应该会高于使用数组,你可以自己用一些数据进行测试
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式