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;
    }
    
    • 0
      @ 2025-9-30 17:38:12

      一道没什么难度的题目。 方法很多样,可以排序完输出第二项,也可以先找最小值再找次小值,这里采用的是内置函数卸载大脑的方法。

      #include<stdio.h>
      #include<string.h>
      #include<stdlib.h>
      int compare(const void*a,const void*b){
      	return (*(int*)a-*(int*)b);
      }
      
      
      int main(){
      	int n;scanf("%d",&n);
      	int a[n];
      	int i;
      	for(i=0;i<n;i++){
      		scanf("%d",&a[i]);
      	} 
      	
      	qsort(a,n,sizeof(int),compare);
      	
      	printf("%d",a[1]);
      	
      	return 0;
      }
      
      • 1

      信息

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