top1编程
← 返回题目
题解

产品质检

1 条题解

  • 0
    @ 2026-8-4 16:08:45

    解题思路

    工厂给每件 T 恤打质检分(1~100),分数小于等于 60 的是劣质产品,需要回收。输入是一串分数,以 0 结尾(0 不是真实分数,只表示输入结束),要统计有多少件劣质产品。

    我们不知道一共要读多少个分数,所以用 while 循环而不是 for 循环:

    1. 先读入第一个分数 x;
    2. 只要 x 不等于 0(0 是结束标志),就进入循环;
    3. 在循环里判断:如果 x≤60,说明是劣质产品,计数器 cnt 加 1;
    4. 再读入下一个分数 x,继续循环;
    5. 读到 0 时循环结束,输出 cnt。

    这种"先读入、再判断、循环体末尾再读入"的模式叫"哨兵法":用一个特殊的值(这里是 0)当哨兵,表示数据结束,非常适合处理数量不确定的输入。

    参考代码

    #include <iostream>
    using namespace std;
    
    int main() {
        int x;              // x:当前读入的一个质检分数
        cin >> x;           // 先读入第一个分数
        int cnt = 0;        // cnt:需要回收的劣质产品数量
        while (x != 0) {    // 分数不是 0 就继续读(0 表示输入结束)
            if (x <= 60) {  // 质检分数小于等于 60 的是劣质产品
                cnt = cnt + 1;  // 回收数量加 1
            }
            cin >> x;       // 读入下一个分数
        }
        cout << cnt << endl; // 输出需要回收的产品数量
        return 0;
    }
    

    复杂度分析

    循环次数等于实际输入的分数个数 t(读到 0 之前的所有数),每次循环做一次判断,所以时间复杂度是 O(t)。空间上只用 x、cnt 两个变量,空间复杂度 O(1)。

    • 1