购买文具

分析问题

首先,我们需要清楚地理解题目要求:

1.文具种类与价格

  • 圆珠笔:8 角钱一支
  • 铅笔:2 角钱一支
  • 铅笔芯:1 角钱一支

2.购买要求

  • 每样至少买一支即圆珠笔、铅笔、铅笔芯的数量都 ≥ 1
  • 总数要超过 30 支即圆珠笔 + 铅笔 + 铅笔芯 > 30
  • 钱要全部花完即总花费 =N 元

3.单位统一

  • 题目中N 的单位是元,而文具价格是角。为了方便计算,我们将N 元转换为10N 角。

建立模型

我们需要找到满足以下条件的非负整数解设圆珠笔数量为x,铅笔为y,铅笔芯为z:

  1. x >=1, y >= 1 , z>=1
  2. x + y + z > 30
  3. 8x + 2y + z = 10N
  4. 为了简化问题,我们可以:
  • 遍历所有可能的 x 和 y,然后计算 z
  • 检查 z 是否满足 z >=1 和 x + y + z > 30

编写 C++ 代码

以下是基于上述思路的 C++ 代码:

#include <bits/stdc++.h>
using namespace std;

int main() {
    int N;
    cin >> N;
    int totalMoney = 10 * N; // 转换为角
    int count = 0;

    for (int x = 1; 8 * x <= totalMoney - 3; x++) { // x至少1支,且剩余的钱至少能买1支铅笔和1支铅笔芯
        for (int y = 1; 8 * x + 2 * y <= totalMoney - 1; y++) { // y至少1支,且剩余的钱至少能买1支铅笔芯
            int z = totalMoney - 8 * x - 2 * y;
            if (z >= 1 && x + y + z > 30) {
                count++;
            }
        }
    }
    cout << count << endl;
    return 0;
}

代码解释

1.输入处理

  • 读取整数N,表示元数。
  • 将N 元转换为10N 角,存入 totalMoney

2.遍历所有可能的x 和y

  • x 从 1 开始,直到8x 不超过 totalMoney - 3因为至少需要 2 角买铅笔和 1 角买铅笔芯
  • y 从 1 开始,直到8x + 2y 不超过 totalMoney - 1因为至少需要 1 角买铅笔芯

3.计算z 并检查条件

  • z = totalMoney – 8x – 2y
  • 检查z>= 1 且x + y + z > 30。如果满足,方案数 count 加 1

4.输出结果

  • 打印符合条件的方案总数 count

保存 编译 运行