2 条题解

  • 0
    @ 2025-10-1 21:18:17

    来个比较正常的解法。思路是这样的,首先输入起码有两个数,那么检查的初始范围就是两个数,比较这两个数的大小,然后去看后面的数,逐步扩大检查范围,拿后面进来的数跟前面已检查的数对比一下:

    1. 假如这个数比最小值小,那么在检查范围内的最小值就是它,然后次小值就是原来的最小值。
    2. 假如这个数比最小值大,但比检查范围内的次小值大,那么次小值就是它。

    直到检查范围扩大到全部的数,那么在全部的数里次小值就知道了。代码实现如下:

    #include <stdio.h>
    
    int main(void) {
    	int a[105] = {0};
    	int n;
    	scanf("%d", &n);
    	
    	for (int i = 0; i < n; i ++) {
    		scanf("%d", &a[i]);
    	}
    	
    	int min = a[0];
    	int minor = a[1];
    	if (min > minor) {
    		min = a[1];
    		minor = a[0];
    	}
    	for (int i = 0; i < n; i ++) {
    		if (min > a[i]) {
    			minor = min;
    			min = a[i];
    		}
    		if (minor > a[i] && a[i] > min) {
    			minor = a[i];
    		}
    	}
    	
    	printf("%d", minor);
    	
    	return 0;
    }
    

    信息

    ID
    19
    时间
    1000ms
    内存
    256MiB
    难度
    4
    标签
    递交数
    324
    已通过
    157
    上传者