第二小整数
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 8441 Accepted Submission(s): 5298
Problem Description
求n个整数中倒数第二小的数。
每一个整数都独立看成一个数,比如,有三个数分别是1,1,3,那么,第二小的数就是1。
Input
输入包含多组测试数据。
输入的第一行是一个整数C,表示有C测试数据;
每组测试数据的第一行是一个整数n,表示本组测试数据有n个整数(2<=n<=10),接着一行是 n个整数 (每个数均小于100);
Output
请为每组测试数据输出第二小的整数,每组输出占一行。
Sample Input
2
2
1 2
3
1 1 3
Sample Output
2
1
本题默认输入的数不重复,因而只要排序输出倒数第二个数即可
#include<stdio.h>
int main()
{
int num, i, str[10];
int count;
while(scanf("%d", &count)!=EOF){
while(count--){
int num, i, j, str[10], temp;
scanf("%d", &num);
for(i=0; i<num; i++){
scanf("%d", &str[i]);
}
for(i=0; i<num-1; i++){ // ①
for(j=i+1; j<num; j++){
if(str[i]>str[j]){
temp = str[i];
str[i] = str[j];
str[j] = temp;
}
}
printf("%d\n", str[1]);
}
}
return 0;
}
对于①处的排序我们可以用qsort()函数代替
#include<stdio.h>
#include <stdlib.h>
int cmp(const void *x,const void *y)
{
return (*(int*)x - *(int*)y);
}
int main()
{
int num, i, str[10];
int count;
while(scanf("%d", &count)!=EOF){
while(count--){
int num, i, j, str[10], temp;
scanf("%d", &num);
for(i=0; i<num; i++){
scanf("%d", &str[i]);
}
qsort(str, num, sizeof(int), cmp);
printf("%d\n", str[1]);
}
}
return 0;
}