题解
产品质检
1 条题解
-
0
解题思路
工厂给每件 T 恤打质检分(1~100),分数小于等于 60 的是劣质产品,需要回收。输入是一串分数,以 0 结尾(0 不是真实分数,只表示输入结束),要统计有多少件劣质产品。
我们不知道一共要读多少个分数,所以用 while 循环而不是 for 循环:
- 先读入第一个分数 x;
- 只要 x 不等于 0(0 是结束标志),就进入循环;
- 在循环里判断:如果 x≤60,说明是劣质产品,计数器 cnt 加 1;
- 再读入下一个分数 x,继续循环;
- 读到 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