1 条题解

  • 0
    @ 2026-6-19 10:30:14

    📝 题目大意

    给定 55 个整数 A,B,C,D,EA, B, C, D, E,统计其中不同整数的个数。

    💡 解题思路

    1. 题目分析:数据范围极小(01000 \sim 100),只有 55 个数,可以直接用排序或其他去重手段解决。因为只有 55 个元素,任何 O(nlogn)O(n \log n) 甚至 O(n2)O(n^2) 的做法都能通过。

    2. 算法推导

      • 首先将 55 个整数读入数组 aa,采用 11 索引方便后续操作。
      • 对数组 a[15]a[1 \dots 5] 进行升序排序,使得相同元素相邻。
      • 初始化计数器 m=1m = 1(至少存在 11 种不同的整数)。
      • i=1i = 144,依次比较 a[i]a[i]a[i+1]a[i+1]
        • a[i]a[i+1]a[i] \neq a[i+1],说明遇到了一种新的整数,mm11
      • 最终输出 mm
    3. 边界与细节

      • 55 个数全部相同时,mm 始终保持初始值 11,输出 11,正确。
      • 55 个数全部不同时,相邻比较每次都会触发 mm 自增,最终 m=5m = 5,正确。
      • 代码中变量 nn 存储了 a[1]a[1],但后续未使用,不影响正确性。

    ⏱️ 复杂度分析

    • 时间复杂度O(1)O(1)(实际为 O(5log5)O(5 \log 5),但常数级别,可视为 O(1)O(1)
    • 空间复杂度O(1)O(1)(数组大小固定为 105105,常数级)

    💻 标准代码 (C++)

    #include<bits/stdc++.h>
    using namespace std;
    int main(){
    	int a[105], m = 1, n;        // m 初始化为 1,表示至少有一种不同的数
    	for(int i = 1; i <= 5; i++) cin >> a[i];  // 读入 5 个整数
    	sort(a + 1, a + 5 + 1);      // 对 5 个数升序排序,使相同元素相邻
    	n = a[1];                     // 记录第一个元素(备用)
    	for(int i = 1; i <= 4; i++)
    		if(a[i] != a[i + 1])      // 相邻元素不同,说明遇到了新种类的数
    			m++;                  // 种类数 +1
    	cout << m;                    // 输出结果
    	return 0;
    }
    
    • 1

    信息

    ID
    633
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    1
    已通过
    1
    上传者