B - 第二小整数

求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

就是求第二小的整数嘛,给冒泡一下,然后输出a[1]就可以了,

#include<stdio.h>
int main()
{
	int n;
	int arr[100];
	int i,j;
	scanf("%d",&n);
	
		while(n--){
				int a ;
		scanf("%d",&a);
		for(i=0;i<a;i++)
		scanf("%d",&arr[i]);
		
		//冒泡排个序,哼  
		for(i=1;i<a;i++){
			for(j=0;j<a-i;j++)
			{
				if(arr[j]>arr[j+1])
				{	int t ;t=arr[j];arr[j]=arr[j+1];arr[j+1]=t;}
			}
		}
		printf("%d\n",arr[1]);
		}
	
}

这种的在这个题目里也可以AC,但是显然就比较复杂了,也就是我这种菜鸟会用这种排序,我看了一下老师的,技巧很简单。分享一下。可以去https://blog.csdn.net/tigerisland45/article/details/75969924里看下,我也把老师的代码复制过来了。如下。

#include <stdio.h>
#include <limits.h>
 
int main(void)
{
    int c, n, a, min, smin, i;
 
    scanf("%d", &c);
    while(c--) {
        scanf("%d", &n);
 
        smin = min = INT_MAX;
        for(i=1; i<=n; i++) {
            scanf("%d", &a);
 
            if(a <= min) {
                smin = min;
                min = a;
            } else if(a < smin)
                smin = a;
        }
 
        printf("%d\n", smin);
    }
 
    return 0;
}

https://blog.csdn.net/tigerisland45/article/details/75969924

猜你喜欢

转载自blog.csdn.net/weixin_42324904/article/details/81136918