题解:洛谷 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
【核心思想】
-
问题分析:给定两个正整数 \(A\) 和 \(B\),检查 \(A+B\)、\(A-B\)、\(A \times B\)、\(A \div B\) 四种运算结果中是否至少有一个等于 \(9\)。若满足则输出
Nine,否则输出Nein。这是一个简单条件判断问题,关键在于准确实现四种运算的等值判断。 -
算法选择:
- 直接模拟:依次计算四种运算结果,检查是否等于 \(9\)
- 除法特判:\(A \div B = 9\) 等价于 \(A = 9B\)(由于 \(A, B\) 为正整数,无需考虑整除问题)
-
关键步骤:
- 读取 \(A\) 和 \(B\)
- 检查以下任一条件是否成立:
- \(A + B = 9\)
- \(A - B = 9\)
- \(A \times B = 9\)
- \(A = 9B\)(即 \(A \div B = 9\))
- 若任一条件成立,输出
Nine;否则输出Nein
-
时间/空间复杂度:
- 时间复杂度:\(O(1)\),仅需常数次算术运算和比较
- 空间复杂度:\(O(1)\),仅使用常数额外空间
-
简单模拟的核心思想:
- 枚举所有可能:四种运算直接列举,不遗漏任何情况
- 除法转乘法:避免浮点精度问题,将 \(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
浙公网安备 33010602011771号