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

在这里插入图片描述


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/937181.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PHP开发日志 ━━ 基础知识:四种不同的变量返回方式该如何调用

最近在给框架升级&#xff0c;其中涉及到古早的缓存系统升级&#xff0c;现在准备区分类型为混合、变量和普通文件&#xff0c;那么变量用什么形式存储到缓存才能给后续开发带来便利和通用性呢&#xff1f;于是就涉及到了本文的php基础知识。 好吧&#xff0c;又是一个无用的知…

Y3编辑器教程5:触发器进阶使用(镜头、UI、表格、函数库、排行榜、游戏不同步)

文章目录 一、游戏声音设计二、 游戏镜头设计2.1 镜头的基本参数2.2 镜头时间轴动画 三、界面编辑3.1 界面编辑器设置3.2 添加按钮事件3.3 触发编写 四、 表格编辑器&#xff08;实现对话UI&#xff09;4.1 一维表和多维表4.2 数据验证、搜索、保存与撤销4.3 Excel导入导出4.4 …

高中数学:成对数据的统计分析

文章目录 一、成对数据的统计相关性1、相关关系2、样本相关系数 二、一元线性回归模型及其应用1、一元线性回归模型2、最小二乘估计3、拟合效果比较公式4、注意点5、例题 三、列联表与独立性检验1、分类变量2、分类变量与列联表3、独立性检验4、常用小概率值和临界值5、例题6、…

Python OCR文字识别api接口

一.引言 文字识别&#xff0c;也称为光学字符识别&#xff08;Optical Character Recognition, OCR&#xff09;&#xff0c;是一种将不同形式的文档&#xff08;如扫描的纸质文档、PDF文件或数字相机拍摄的图片&#xff09;中的文字转换成可编辑和可搜索的数据的技术。随着技…

Type-C接口电热毯的创新之旅

在科技日新月异的今天&#xff0c;智能家居产品正逐步渗透到我们生活的每一个角落&#xff0c;从智能灯光到温控系统&#xff0c;无一不展现着科技带来的便捷与舒适。而在这个追求高效与智能化的浪潮中&#xff0c;一款结合了最新科技元素的电热毯——Type-C接口电热毯&#xf…

【Unity3D】实现UGUI高亮引导点击

Unity版本2019.4.0f1 Personal <DX11> using UnityEngine; using UnityEngine.UI;public class GuideMask : MonoBehaviour, ICanvasRaycastFilter {public Canvas canvas;public Transform guideTargetTrans;public Image image;private Vector3 guideTargetWorldPos;pr…

docker启动一个helloworld(公司内网服务器)

这里写目录标题 容易遇到的问题&#xff1a;1、docker连接问题 我来介绍几种启动 Docker Hello World 的方法&#xff1a; 最简单的方式&#xff1a; docker run hello-world这会自动下载并运行官方的 hello-world 镜像。 使用 Nginx 作为 Hello World&#xff1a; docker…

Redisson常用方法

Redisson 参考: 原文链接 定义&#xff1a;Redisson 是一个用于与 Redis 进行交互的 Java 客户端库 优点&#xff1a;很多 1. 入门 1.1 安装 <!--redission--> <dependency><groupId>org.redisson</groupId><artifactId>redisson</artifa…

火焰传感器与C++编程:精准检测火灾的技术实现

火灾是我们日常生活中一个不可忽视的安全隐患&#xff0c;而火灾报警系统的实现可以大大提高我们的安全保障。通过嵌入式技术和传感器&#xff0c;我们能够在第一时间识别火灾隐患并发出警报。火焰传感器作为一种专门用于火灾监测的传感器&#xff0c;能高效地通过红外线&#…

arcGIS使用笔记(无人机tif合并、导出、去除黑边、重采样)

无人机航拍建图之后&#xff0c;通过大疆智图软件可以对所飞行的区域的进行拼图&#xff0c;但是如果需要对拼好的图再次合并&#xff0c;则需要利用到arcGIS软件。下面介绍arcGIS软件在这个过程中常用的操作。 1.导入tif文件并显示的方法&#xff1a;点击“”图标进行导入操作…

VMware Workstation的有线连接消失了

进入/var/lib目录下 cd /var/lib 查看是否存在NetworkManager 文件 ls 将其删除&#xff0c;然后虚拟机reboot一下。 sudo rm -r NetworkManager reboot 解决了&#xff0c;可以联网

算法-动态数组-62.不同路径

一、题目 二、思路解析 1.思路&#xff1a; 对于找到目的地它的来源主要来源于目的地的上一格和目的地的左一格 2.常用方法&#xff1a; 无 3.核心逻辑&#xff1a; 1.处理边界&#xff1a; a.只向右移动&#xff0c;至始至终只有一条路径 for(int i0;i<m;i){dp[i][0]1; } …

C# 探险之旅:第三十节 - 类型class(继承Inheritance) —— 当“儿子”继承“老爸”的遗产

嘿&#xff0c;探险家们&#xff01;欢迎再次踏上我们的C#奇幻旅程。今天&#xff0c;我们要聊一个既有趣又实用的话题——继承&#xff08;Inheritance&#xff09;&#xff01;想象一下&#xff0c;如果你的“儿子”能够继承“老爸”的遗产&#xff0c;那编程世界里的对象们也…

Qt:Q_GLOBAL_STATIC实现单例(附带单例使用和内存管理)

转载 https://blog.csdn.net/m0_71489826/article/details/142288179 前言 本文主要写Q_GLOBAL_STATIC实现单例以及单例的释放&#xff0c;网上很多教程只有单例的创建&#xff0c;但是并没有告诉我们单例的内存管理&#xff0c;这就很头疼。 正文 使用 Qt 的 Q_GLOBAL_STA…

12.5【Java exp4】【DEBUG】

pro1 JwtAuthenticationFilter 类在两个不同的位置被定义了&#xff0c;导致Spring无法确定使用哪个定义。 为了解决这个问题&#xff0c;你可以采取以下几种方法之一&#xff1a; 检查类路径中的重复类&#xff1a; 确保 JwtAuthenticationFilter 类没有在多个地方被定义。检…

C++11语法解析(二)

可变参数模板 基本语法及原理 ・C11 支持可变参数模板&#xff0c;也就是说支持可变数量参数的函数模板和类模板&#xff0c;可变数目的参数被称为参数包&#xff0c;存在两种参数包&#xff1a;模板参数包&#xff0c;表示零或多个模板参数&#xff1b;函数参数包&#xff1…

《知识拓展 · 统一建模语言UML》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

轻量级日志管理平台:Grafana Loki搭建及应用(详细篇)

前言 Grafana Loki是Grafana Lab团队提供的一个水平可扩展、高可用性、多租户的日志聚合系统&#xff0c;与其他日志系统不同的是&#xff0c;Loki最初设计的理念是为了为日志建立标签索引&#xff0c;而非将原日志内容进行索引。 现在目前成熟的方案基本上都是&#xff1a;L…

【原生js案例】如何让你的网页实现图片的按需加载

按需加载&#xff0c;这个词应该都不陌生了。我用到你的时候&#xff0c;你才出现就可以了。对于一个很多图片的网站&#xff0c;按需加载图片是优化网站性能的一个关键点。减少无效的http请求&#xff0c;提升网站加载速度。 感兴趣的可以关注下我的系列课程【webApp之h5端实…

用于卫星影像间接RPC模型精化的通用光束法平差方法

引言 介绍了通用RPC模型的表达式&#xff0c;which has been down to death 描述了RPC模型产生误差的原因——主要与定义传感器方位的姿态角有关。 每个影像都会对应一个三维点云&#xff0c;但是对同一地物拍摄的不同影像对应出来的三维点云是不一样的&#xff0c;所以才需…