C语言题目,求大神帮忙 25
冠军总是常常受人关注的,可亚军也不错啊,现在我们也来关注一下他。给出一列整数,求出其中的第二大值,在这里冠军只有一个,也就是当有两个最大值时,只有第一个最大值才是冠军,第...
冠军总是常常受人关注的,可亚军也不错啊,现在我们也来关注一下他。给出一列整数,求出其中的第二大值,在这里冠军只有一个,也就是当有两个最大值时,只有第一个最大值才是冠军,第二个最大值只能是亚军。输入的第一行为一个数T,表示测试用例的个数。 每组测试用例包括两行,第一行为一个数N(2<=N<=10000),表示该组测试用例的数据个数。 第二行为N个整数,表示这一组测试数据。对于每组测试用例,输出一个数,为这组数据中第二大的数。
展开
1个回答
展开全部
#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;
}
又写了一个更好的,这个效率应该会高于使用数组,你可以自己用一些数据进行测试
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;
}
又写了一个更好的,这个效率应该会高于使用数组,你可以自己用一些数据进行测试
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询