当前位置: 首页 > news >正文

【C++】判断能否被 3, 5, 7 整除问题解析与优化


在这里插入图片描述

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳]
本文专栏: C++

文章目录

  • 💯前言
  • 💯题目描述
  • 💯老师代码实现与分析
    • 老师代码逻辑分析
    • 优点
    • 缺点
  • 💯学生代码实现与分析
    • 学生代码逻辑分析
    • 优点
    • 缺点
  • 💯改进与优化
    • 优化代码实现
    • 优化点分析
    • 优化效果
  • 💯题目扩展与思考
  • 💯小结


在这里插入图片描述


💯前言

  • 在计算机科学教育中,基础整数计算问题是一种经典且有效的教学策略。这类问题既能帮助初学者掌握编程的基本语法和逻辑,也为更复杂的算法设计与实现奠定了基础。本文以判断整数是否能被 357 整除的问题为例,详细分析问题背景代码实现及其优化方法,并探讨潜在的扩展应用。
    不仅如此,本问题在条件分支逻辑设计代码结构优化等方面蕴含着丰富的学习价值。通过深入剖析不同实现方式及其优缺点,本文旨在为读者提供系统化的解决思路,同时为更高级的编程问题奠定理论基础实践能力
    C++ 参考手册
    在这里插入图片描述


💯题目描述

判断能否被 3,5,7 整除
在这里插入图片描述

题目:判断能否被 3, 5, 7 整除

给定一个整数 x x x,判断是否能被 3、5、7 整除,并输出以下信息:

  1. 如果能同时被 3、5 和 7 整除,输出 3 5 7
  2. 如果能被其中两个数字整除,按照数字从小到大的顺序输出,例如 3 5
  3. 如果只能被其中一个数字整除,输出对应的数字;
  4. 如果不能被任何一个数字整除,输出 n

输入格式:
输入一行,包含一个整数 x x x

输出格式:
输出一行,按照题目要求给出整数 x x x 是否能被 3、5、7 整除的情况。

输入输出示例:

输入:

105

输出:

3 5 7

数据范围:
1 ≤ x ≤ 200 1 \leq x \leq 200 1x200


💯老师代码实现与分析

老师代码采用多层条件判断逻辑,逐一覆盖所有可能的输出情景,以确保解法的完整性。以下为代码实现:

#include <iostream>
using namespace std;int main()
{int n = 0;cin >> n;if (n % 3 == 0 && n % 5 == 0 && n % 7 == 0)cout << "3 5 7" << endl;else if (n % 3 == 0 && n % 5 == 0)cout << "3 5" << endl;else if (n % 3 == 0 && n % 7 == 0)cout << "3 7" << endl;else if (n % 5 == 0 && n % 7 == 0)cout << "5 7" << endl;else if (n % 3 == 0)cout << "3" << endl;else if (n % 5 == 0)cout << "5" << endl;else if (n % 7 == 0)cout << "7" << endl;elsecout << "n" << endl;return 0;
}

在这里插入图片描述


老师代码逻辑分析

  1. 条件覆盖性

    • 每个分支明确对应一种输出情景,从 3 5 7 到单独的 357,以及无法整除时的 n,保证逻辑无遗漏。
  2. 执行顺序直观

    • 多层 if-else if 语句按照条件优先级执行,逻辑清晰易读。

优点

  • 清晰直观:通过显式列举所有条件,逻辑易于理解和调试。
  • 全面性强:覆盖了所有可能的输入情景。

缺点

  • 代码冗长:多层条件判断导致代码显得繁琐。
  • 扩展性较差:若需新增判断条件(如判断能否被 11 整除),需增加多个分支。
  • 重复计算:条件中存在重复计算(如 n % 3),影响性能。

💯学生代码实现与分析

学生代码通过多个独立的 if 条件判断实现,逻辑更加简洁。以下为代码:

#include <iostream>
using namespace std;int main()
{int x;cin >> x;if (x % 3 == 0)cout << 3 << " ";if (x % 5 == 0)cout << 5 << " ";if (x % 7 == 0)cout << 7 << " ";if (x % 3 != 0 && x % 5 != 0 && x % 7 != 0)cout << "n" << endl;return 0;
}

在这里插入图片描述


学生代码逻辑分析

  1. 独立性强

    • 每个条件均独立判断,避免嵌套逻辑。
  2. 直接输出

    • 满足条件即输出对应数字,无需考虑优先级。

优点

  • 实现简洁:逻辑结构清晰,易于理解。
  • 可扩展性高:新增条件只需添加对应的 if 语句。

缺点

  • 输出格式问题:数字后可能多出空格,影响输出格式。
  • 重复计算x % 3 等条件可能被多次检查。

💯改进与优化

基于上述实现的优缺点,我们提出以下优化方案,以提升代码效率与可维护性,同时确保输出格式符合要求。


优化代码实现

#include <iostream>
using namespace std;int main()
{int x;cin >> x;string result = ""; // 用于存储输出结果if (x % 3 == 0)result += "3 ";if (x % 5 == 0)result += "5 ";if (x % 7 == 0)result += "7 ";if (result.empty())cout << "n" << endl;elsecout << result.substr(0, result.size() - 1) << endl; // 去掉多余空格return 0;
}

优化点分析

  1. 字符串拼接简化逻辑

    • 动态拼接结果字符串,避免了多层条件嵌套。
    • 最终输出时去除末尾多余空格,确保格式正确。
  2. 减少重复计算

    • 避免了对同一条件的重复判断,提高运行效率。
  3. 增强可扩展性

    • 新增条件时,只需追加对应的 if 判断。

优化效果

  • 效率提升:减少冗余计算。
  • 格式正确:通过字符串操作保证输出符合要求。
  • 代码简洁:逻辑清晰,易于维护。

💯题目扩展与思考

  1. 扩展整除范围

    • 若需判断是否能被任意一组数字整除(如 2、3、5、7、11),可通过数组存储条件并动态遍历。
  2. 并行计算优化

    • 针对大规模输入数据,可采用多线程实现,提升整体计算效率。
  3. 跨语言实现

    • 尝试在 Python、Java 等语言中实现,并对比不同语言的性能与代码风格。
  4. 与数学问题结合

    • 可将整除判断与质因数分解、最大公约数(GCD)计算等数学问题结合,设计更复杂的应用场景。

💯小结

  • 在这里插入图片描述
    本文围绕判断整数是否能被 357 整除的问题,从问题描述出发,分析了两种代码实现方式,并提出优化方案。通过改进,我们提升了代码的效率可读性扩展性。同时,本文还探讨了该问题的潜在扩展方向,为解决更复杂的算法问题提供了参考。
    这类问题既是编程基础能力的训练,也是算法设计思维的培养。希望本文能为读者提供启发,帮助其在学习与实践中进一步提升编程能力。同时,这些方法和思路也将为更广泛的技术探索和研究提供助力。

在这里插入图片描述


在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述


http://www.mrgr.cn/news/79969.html

相关文章:

  • LightRAG测试BUG
  • Python爬虫之Scrapy框架基础入门
  • 活着就好20241213
  • git的常用指令 以及说明
  • 解决Vue项目中npm install卡住问题的详细指南
  • HTML常见标签列表,涵盖了多种用途的标签。
  • WIN11中安装Mamba常见问题解决方案
  • windows C#-自动实现属性的轻型类
  • Java项目实战II基于Java+Spring Boot+MySQL的社区帮扶对象管理系统的设计与实现(开发文档+数据库+源码)
  • src 和 href 的区别
  • 在AMD Instinct MI300X加速器上训练Transformers和混合模型
  • 深入解析C++中的函数指针与`typedef`的妙用
  • 快速上手Neo4j图关系数据库
  • 测试岗位应该学什么
  • 操作系统(3)操作系统的运行环境
  • 【他山之石】Leading-Trim: The Future of Digital Typesetting:数字排版的未来 —— Leading-Trim
  • 文献分享: PLAID——为ColBERT架构设计的后期交互驱动器
  • 【qt环境配置】windows下的qt与vs工具集安装\版本对应关系
  • 常见LeetCode-Saw200
  • C#,人工智能,深度学习,目标检测,OpenCV级联分类器数据集的制作与《层级分类器一键生成器》源代码
  • 黑马头条学习笔记
  • 【JVM】JVM基础教程(三)
  • 第 8 章 对象、类与面向对象编程
  • L0、L1与L2范数、核范数
  • Jenkins部署前后端项目
  • MySQL锁的类型有哪些