OneCoder Avatar
OneCodercoderli.com · 957 篇博文
一级

C++ 算法考级专栏

真题分析、矩阵探测、递归回溯与基础语法

🎨 视觉封面

【CSP】CSP-X 2018真题 | 小明的照片 luogu-B4072 (适合GESP一级及以上考生练习)

📅 2026-06-18·✍️ OneCoder·计算中...·⏱️ 4 分钟
#CSP#C++#数学

CSP-X 2018真题-小明的照片,一道纯粹的数学计算题,考察基本的输入输出与加减法运算。适合GESP一级及以上考生练习,难度⭐。

B4072 [CSP-X 2018] 小明的照片

题目要求

题目描述

国庆假期,小明和爸爸妈妈一起外出旅游,沿途拍摄了很多美丽的风景照片,在返程的前一天晚上,他整理了一下所有的照片:手机里有 xx 张,平板电脑里有 yy 张,单反相机里有 zz 张。小明计划开学后拿出 nn 张照片与同学们分享,请问他至少还需要再拍摄多少张照片?

输入格式

一行,四个正整数 n,x,y,zn,x,y,z,中间用空格隔开。

输入的数据保证现有的照片总数不超过 nn

输出格式

一行,只有一个整数,表示还需要再拍摄的照片数量。

输入输出样例 #1

输入 #1
Code 1 行
30 8 2 10
输出 #1
Code 1 行
10

说明/提示

原题没有数据范围,我们将给出合理的数据范围。

对于 100%100\% 的数据,保证 1x,y,zn1091\leq x,y,z\leq n\leq 10^9


题目分析

本题是一道极其简单的数学计算题,属于入门级别的签到题,考察的核心是对题意的理解以及基本的加减运算。

解题思路分析:

  1. 理解题意

    • 小明手上现在有三台设备拍摄的照片,总数为 x+y+zx + y + z
    • 他需要凑齐 nn 张照片与同学分享。
    • 题目保证了现有照片总数不超过 nn,即 x+y+znx + y + z \leq n
    • 求的是还差多少张照片,即 n(x+y+z)n - (x + y + z)
  2. 计算公式

    • 答案直接为:nxyzn - x - y - z
    • 由于题目保证了 x+y+znx + y + z \leq n,因此结果一定是非负整数,不需要特殊处理。
  3. 数据类型注意

    • 由于 nn 最大可达 10910^9,在 int 类型的表示范围(约 2.1×1092.1 \times 10^9)之内,所以使用 int 即可。
    • 但加法 x+y+zx + y + z 三个数最大各为 10910^9,相加最大可能达到 3×1093 \times 10^9,超出了 int 的范围。为了代码的安全性和良好编程习惯,可以改用减法来避免溢出:先用 nn 减去 xx,再减去 yy,最后减去 zz,即 n - x - y - z,这样中间结果始终不超过 nn 的值,不会发生溢出。

复杂度分析:

  • 时间复杂度:O(1)O(1),只需一次加减运算。
  • 空间复杂度:O(1)O(1),只使用几个整型变量。

示例代码

C++ 11 行
#include <iostream>

int main() {
    int n, x, y, z;
    std::cin >> n >> x >> y >> z;

    // 直接计算差值,用连续减法避免中间结果溢出
    std::cout << n - x - y - z << std::endl;

    return 0;
}

💡 OneCoder 资源指引

所有代码开源上传至 GitHub:yummy-code 仓库 · GESP 专题站:GESP WIKI

🤝 技术交流与答疑

欢迎加入:C++ GESP/CSP 考级答疑群(688906745)Java/Python交流群(982860385),点击可直接加群。

📚

猜你想读 · 相关文章推荐

OneCoder

OneCoder (lihongzheshuai)

一个中年人的自留地,记录学习 C++、GESP/NOI、Java、Python 与算法架构的心得体会。本站唯一网址:coderli.com

读者讨论与留言

0 条讨论
✨ 支持点击留言直接回复 · Markdown 引用格式
💬 还没有读者留言,快来成为第一个讨论者吧!