C语言题目,求大神帮忙

冠军总是常常受人关注的,可亚军也不错啊,现在我们也来关注一下他。给出一列整数,求出其中的第二大值,在这里冠军只有一个,也就是当有两个最大值时,只有第一个最大值才是冠军,第二个最大值只能是亚军。输入的第一行为一个数T,表示测试用例的个数。 每组测试用例包括两行,第一行为一个数N(2<=N<=10000),表示该组测试用例的数据个数。 第二行为N个整数,表示这一组测试数据。对于每组测试用例,输出一个数,为这组数据中第二大的数。

#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;
}
又写了一个更好的,这个效率应该会高于使用数组,你可以自己用一些数据进行测试
温馨提示:内容为网友见解,仅供参考
无其他回答

求c语言大神帮忙
1、选B,单向值传递;数量变量型形参,接收对象为 数值,它只能接收,不能反馈;指针变量型形参,接收对象为地址,因为它直接面对物理地址,修改内容,就是直接修改实际值,所以它既是接收,也是反馈。2、选D,二义性,说的是,在使用(调用)这个定义时,不会产生与宏定义本意不同的编程结果。正确的...

C语言问题求大神详细解析
还有函数的返回值类型为void时表示函数没有返回值,不能使用函数的返回值。a错 因为调用在定义之前但是没有声明 b错 函数定义的时候返回值类型为void,却欲图使用函数的返回值。c错 函数的声明返回值为int,定义返回值为void 不相符 d正确 ...

C语言 计算机题 求大神解答~
1、能正确表示逻辑关系:“a≥10或a≤0”的C语言表达式是“a>=10||a<=0”。(D选项)解析:“≥”用“>=”表示,“或”用“||”表示。2、判断char型变量c是否为大写字母的表达式是“(c>='A')&&(c<='Z')”。(C选项)解析:大写字母是A~Z,加上单引号,可以直接用来判断是否符合要求...

一道c语言题目 求大神指点下算法?
根据题意,随机生成红绿蓝球任意个数,并任意顺序排列。这里采用随机数实现。统计按红绿蓝顺序排列最少交换次数,我的思路是:第一步:循环将最后一个红色球与最靠前的其它两色球(并且满足位置在红球之前)交换。第二步:循环将最后一个绿球与最靠前的蓝球(必须在绿球之前)交换。include <stdio.h> ...

c语言求大神
做编程的题目,如果条件允许的话,给你的建议就是直接在编译器编译一下,看看输出的结果,然后利用单步调试,一步步的看下变量中的值得变化。下图是我运行你代码的结果(答案:B):题目解析如下:1、x[3][2] = {0}指的是定义一个 3x2 数组,并将数组的所有值初始化为 0。2、输入2 4 6之后...

C语言试题啊,求大神帮忙答案啊!
C语言规定,函数返回值的类型是由( )所决定。选项:a、return语句中的表达式类型 b、调用该函数时的主调函数类型 c、调用该函数是系统临时指定 d、在定义该函数时所指定的函数类型 这个可以参考第二题,函数的定义规则,当然是由定义的时候确定的了。本题答案为d。题号:6 凡是函数中未指定存储类别的...

C语言问题,求大神解决,谢谢啦,我是小白,最好能够解释下。
^是按位异或运算符,需要把a和b的值化为二进制数后进行按位异或就能得到答案。题中,a=3 ,二进制为:0011;b=6,二进制值为:0110。所以(a^b)按位异或后的值为0101也就是5,左移两位后值(二进制)为:010100 也就是 :20

一道C语言题目,看图~大神帮忙解答下吧!急急急急急!!在线等
答案是D 在C语言中数组赋值可以如A,那样,【】里面定义了长度5{}中有最大不超过5个值,则赋值成功 B在5个数值之内所以也是正确的 答案C,就是另外中赋值方法,在【】中不定义长度,因此数组a[]的实际长度取决于{}中的值的数量,也就是说在C答案中有5个0作为数值,因此C答案中的a[]的实际...

c语言问题,求大神解答
char a=97 a为字符型,对应的是ASCII码表中十进制数97对应的字符,是a c对应的字符是A,对应的ASCII码表中十进制数是65 输出语句的意思是计算字符a和字符A在ASCII码表中对应十进制数的差并按规定格式输出。97-65=32 结果输出a-A=32 选C ...

c语言求大神帮忙解决编程问题
if (i%7==0) 能被7整除。用 n 计数,满5个则换行。include<stdio.h> int main(){ int i,n=0;for (i=100;i<=1000;i++){ if (i%7==0) {printf("%d ",i); n++;}; \/\/输出和计数 if (n==5){printf("\\n");n=0;}; \/\/换行控制 };return 0;} ...

相似回答