题解:洛谷 AT_abc471_a Nine or Nein

【题目来源】

洛谷:AT_abc471_a [ABC471A] Nine or Nein

【题目描述】

给定正整数 \(A\)\(B\)

如果下列数值中至少有一个等于 \(9\) ,则输出 Nine ;否则,输出 Nein

  • \(A + B\)
  • \(A - B\)
  • \(A \times B\)
  • \(A \div B\)

【输入】

输入内容由标准输入提供,格式如下:

\(A\) \(B\)

【输出】

输出答案

【输入样例】

16 7

【输出样例】

Nine

【核心思想】

  1. 问题分析:给定两个正整数 \(A\)\(B\),检查 \(A+B\)\(A-B\)\(A \times B\)\(A \div B\) 四种运算结果中是否至少有一个等于 \(9\)。若满足则输出 Nine,否则输出 Nein。这是一个简单条件判断问题,关键在于准确实现四种运算的等值判断。

  2. 算法选择

    • 直接模拟:依次计算四种运算结果,检查是否等于 \(9\)
    • 除法特判\(A \div B = 9\) 等价于 \(A = 9B\)(由于 \(A, B\) 为正整数,无需考虑整除问题)
  3. 关键步骤

    • 读取 \(A\)\(B\)
    • 检查以下任一条件是否成立:
      • \(A + B = 9\)
      • \(A - B = 9\)
      • \(A \times B = 9\)
      • \(A = 9B\)(即 \(A \div B = 9\)
    • 若任一条件成立,输出 Nine;否则输出 Nein
  4. 时间/空间复杂度

    • 时间复杂度:\(O(1)\),仅需常数次算术运算和比较
    • 空间复杂度:\(O(1)\),仅使用常数额外空间
  5. 简单模拟的核心思想

    • 枚举所有可能:四种运算直接列举,不遗漏任何情况
    • 除法转乘法:避免浮点精度问题,将 \(A/B=9\) 转化为整数等式 \(A=9B\)
    • 短路求值|| 运算符在第一个条件满足时立即停止后续判断,效率最优
    • 适用于条件判断、简单算术验证、入门模拟类问题

【算法标签】

入门 #模拟

【代码详解】

#include <bits/stdc++.h>
using namespace std;
int a, b; // a, b:输入的两个正整数

int main()
{
    cin >> a >> b; // 读入两个正整数
    // 检查四种运算结果是否至少有一个等于9
    // a+b==9: 加法
    // a-b==9: 减法
    // a*b==9: 乘法
    // b*9==a: 除法(即a/b==9,等价于a==b*9)
    if (a+b==9 || a-b==9 || a*b==9 || b*9==a)
        cout << "Nine" << endl; // 至少有一个等于9
    else
        cout << "Nein" << endl; // 没有一个等于9
    return 0;
}

【运行结果】

16 7
Nine
posted @ 2026-08-23 22:00  团爸讲算法  阅读(15)  评论(0)    收藏  举报