题目链接

牛牛是否被叫家长

题目描述

牛牛的期中考试有三门科目,考核标准是三科平均分不低于 60 分。如果平均分低于 60 分,班主任就会请家长。给定牛牛的三科成绩,请判断他是否会被请家长。

输入描述: 在一行中输入三个整数,分别表示牛牛的三科成绩。

输出描述: 如果牛牛会被请家长(即平均分低于60),输出 "YES";否则输出 "NO"。

解题思路

本题的核心是判断三科成绩的平均分是否小于 60。

方法一:浮点数计算(不推荐) 最直观的方法是先计算三科总分,然后除以 3.0 得到一个浮点数平均分,再与 60 进行比较。这种方法是可行的,但在处理浮点数时需要注意潜在的精度问题,虽然在本题中影响不大,但在更复杂的场景下可能会成为陷阱。

方法二:整数计算(推荐) 一个更健壮、更高效的技巧是避免浮点数运算。我们可以将判断条件 (a + b + c) / 3 < 60 进行数学变换。 在不等式两边同时乘以 3,得到一个完全等价的、只涉及整数运算的条件: a + b + c < 180

这种方法不仅计算更快,而且完全避免了浮点数可能带来的精度误差,是解决此类问题的首选策略。

  1. 读取输入:读取三个整数成绩 a, b, c
  2. 计算总分:计算 sum = a + b + c
  3. 判断:检查 sum 是否小于 180。
  4. 输出结果:如果小于 180,输出 "YES";否则输出 "NO"。

代码

#include <iostream>

using namespace std;

int main() {
    int score1, score2, score3;
    cin >> score1 >> score2 >> score3;
    
    // 比较总分与 180 的大小,避免浮点数运算
    if (score1 + score2 + score3 < 180) {
        cout << "YES" << endl;
    } else {
        cout << "NO" << endl;
    }
    
    return 0;
}
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int score1 = sc.nextInt();
        int score2 = sc.nextInt();
        int score3 = sc.nextInt();
        
        // 比较总分与 180 的大小,避免浮点数运算
        if (score1 + score2 + score3 < 180) {
            System.out.println("YES");
        } else {
            System.out.println("NO");
        }
    }
}
# 读取三科成绩
score1, score2, score3 = map(int, input().split())

# 比较总分与 180 的大小,避免浮点数运算
if score1 + score2 + score3 < 180:
    print("YES")
else:
    print("NO")

算法及复杂度

  • 算法:条件判断与整数算术。
  • 时间复杂度: - 这是一个固定的计算和判断流程。
  • 空间复杂度: - 仅需常数空间存储变量。