本题是一道简单的模拟计算题。已知三种文具的单价和购买数量,以及小明手里的总钱数,要求判断钱是否足够,并输出剩余或缺少的金额。题目中所有数据范围都很小(1 ≤ 数量 ≤ 10),因此直接计算即可,无需考虑复杂算法。
核心任务:
Yes 和剩余的钱数;No 和缺少的钱数。我们可以把题目拆成三个步骤:
x、记事本数量 y、直尺数量 z 和总钱数 q。x * 2y * 5z * 3t = x * 2 + y * 5 + z * 3q >= t,输出 Yes 并换行,再输出 q - t。No 并换行,再输出 t - q。本题的算法是直接模拟,即按照题目描述的规则一步一步计算,没有任何分支复杂结构或循环。整个程序是线性结构的顺序执行。
int 类型存储中间结果即可。endl 或 "\n"。整个程序只有常量次数的输入、计算和输出操作,因此时间复杂度为 O(1),即常数时间复杂。
程序运行时占用的额外内存也很少,仅需几个整数变量,空间复杂度同样为 O(1),完全满足题目 512MB 的内存限制。
下面是与题目提供一致的 C++ 代码,并添加了注释以帮助理解。
cpp1#include <iostream> 2using namespace std; 3 4int main() { 5 int x, y, z, q; 6 // 输入四种数据 7 cin >> x >> y >> z >> q; 8 9 // 计算所需总金额 10 int t = x * 2 + y * 5 + z * 3; 11 12 // 判断钱是否足够并按要求输出 13 if (q >= t) { 14 cout << "Yes" << endl; // 够买 15 cout << q - t << endl; // 剩余的钱 16 } else { 17 cout << "No" << endl; // 不够买 18 cout << t - q << endl; // 缺少的钱 19 } 20 21 return 0; 22}
#include <iostream>:引入标准输入输出流库,用于 cin 和 cout。using namespace std;:使用标准命名空间,避免在 cin、cout 前加 std::。int main():程序入口函数。cin >> x >> y >> z >> q;:从标准输入依次读取四个整数,分别存入变量 x、y、z、q。int t = x * 2 + y * 5 + z * 3;:计算购买所有文具的总花费,保存在变量 t 中。if (q >= t):判断手里的钱是否大于或等于总花费。
Yes 和剩余金额 q - t。No 和缺少金额 t - q。endl 用于输出换行并刷新缓冲区。return 0;:程序正常结束。这道题主要考察基本的输入输出、整数运算以及条件判断。掌握直接模拟的思想后,可以轻松解决这类“买东西算余缺”的问题。对于初学者,建议自己手算一个例子来验证程序的正确性,比如:
1(签字笔1支),1(记事本1本),1(直尺1把),10(手里的钱)Yes
0