【C++】闰年判断问题完整解析与代码优化


在这里插入图片描述

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

文章目录

  • 💯前言
  • 💯题目描述
  • 💯我的解法
    • 分析
  • 💯老师解法分析
    • 代码 1(未优化版本)
      • 分析
    • 代码 2(优化版本)
      • 分析
  • 💯对比与扩展
    • 对比分析
    • 思维扩展
  • 💯小结


在这里插入图片描述


💯前言

  • 计算法和编程学习中,间年判断类题通常作为检验对复合条件逻辑操作的理解能力的重要工具。它不仅考察了编程者的基本语法掌握情况,还对其理解复杂逻辑表达的能力提出了要求。本文对一道关于间年判断的典型题目进行了深度分析,包括题目解析不同代码实现的比较优化手法及其适用性讨论,并进一步提出思维扩展的可能性。通过本文分析,读者将能够更加系统地理解间年判断的数学原理及其在编程实践中的实现方法,为类似问题的解决奠定坚实基础。
    C++ 参考手册
    在这里插入图片描述

💯题目描述

闰年判断
在这里插入图片描述

本题要求判断一年是否是间年。如果是间年,则输出 1;否则输出 0

间年规则

  • 规则 1:如果一年可以被 4 整除,但不是 100 的倍数,则为间年。
  • 规则 2:或者,如果一年可以被 400 整除,则为间年。

示例

  • 2004 年和 2020 年是间年,因为它们满足规则 1。
  • 1900 年不是间年,因为它虽然是 4 的倍数,但同时是 100 的倍数且不满足规则 2。
  • 2000 年是间年,因为它满足规则 2。

输入格式
输入为一个正整数 n n n,表示年份。

输出格式
如果该年份是间年,则输出 1;否则输出 0

样例 1
输入:

1926

输出:

0

样例 2
输入:

2000

输出:

1

样例 3
输入:

1996

输出:

1

💯我的解法

#include <iostream>
using namespace std;
int main()
{
    int year;
    cin >> year;
    if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
        cout << 1 << endl;
    else
        cout << 0 << endl;
    return 0;
}

在这里插入图片描述


分析

  1. 间年判定的条件

    • 如果一年可以被 4 整除,但不是 100 的倍数,则为间年。
    • 或者,如果一年可以被 400 整除,则为间年。
  2. 代码分析

    • 输入一个年份值。
    • 根据间年判断条件,使用复合条件表达式通过 ifelse 进行判断。
    • 满足条件时,调用 cout 输出 1,否则输出 0
  3. 特点

    • 使用了 &&|| 操作符进行逻辑条件组合。
    • 优点:逻辑表达较为直接,简洁清晰。
  4. 测试结果分析

    • 如果输入 1926:输出 0,因为不满足任何间年条件。
    • 如果输入 2000:输出 1,因为满足规则 2。
    • 如果输入 1996:输出 1,因为满足规则 1。

💯老师解法分析


代码 1(未优化版本)

#include <iostream>
using namespace std;
int main()
{
    int year = 0;
    cin >> year;
    if (year % 4 == 0 && year % 100 != 0)
        cout << "1" << endl;
    else if (year % 400 == 0)
        cout << "1" << endl;
    else
        cout << "0" << endl;
    return 0;
}

在这里插入图片描述


分析

  1. 逻辑

    • 首先判断是否满足“是 4 的倍数但不是 100 的倍数”,如果满足,输出 1。
    • 如果不满足上述条件,再判断是否满足“是 400 的倍数”,如果满足,输出 1。
    • 如果都不满足,输出 0。
  2. 优点

    • 分段逻辑透明,对初学者更加友好,适合展示条件分支的结构化编写方式。
  3. 缺点

    • 存在代码冗余,重复多次 cout 输出语句。
    • 条件分支较多,代码长度不够简洁。

代码 2(优化版本)

#include <iostream>
using namespace std;
int main()
{
    int year = 0;
    cin >> year;
    if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
        cout << "1" << endl;
    else
        cout << "0" << endl;
    return 0;
}

在这里插入图片描述


分析

  1. 逻辑表达

    • 将两个条件通过逻辑或 || 组合在一起,使代码更加紧凑。
    • 条件优先级通过括号清晰标识,避免了歧义。
  2. 优点

    • 减少了冗余代码,特别是 cout 输出语句只出现一次。
    • 条件表达更加简洁易懂,便于维护和扩展。
  3. 适用场景

    • 适合编写复杂度较高的程序或需要优化执行效率的场景。
    • 对逻辑优先级的处理能力要求较高,适合进阶学习者。

💯对比与扩展


对比分析

  • 冗余代码的优化

    • 未优化版本中存在重复的输出语句,而优化版本通过逻辑条件合并减少了冗余。
    • 优化版本在代码简洁性和维护性方面表现更优。
  • 逻辑结构的清晰度

    • 未优化版本的分段逻辑更适合初学者理解,便于展示条件分支的执行过程。
    • 优化版本则更具专业性和通用性,适合实际开发场景。
  • 适用对象

    • 如果是用于教学或帮助初学者理解逻辑结构,推荐使用未优化版本。
    • 如果是实际项目开发或性能要求较高的场景,推荐使用优化版本。

思维扩展

  1. 通用性扩展

    • 类似的逻辑判定问题,例如闰秒的判定或日期有效性的判断,也可以使用类似的逻辑组合方式实现。
  2. 性能优化

    • 在实际开发中,可以结合编译器优化选项,对类似的逻辑条件进行指令级别的优化。
  3. 语言迁移

    • 此类逻辑在其他编程语言(如 Python、Java)中同样适用,逻辑表达基本不变,仅需调整语法。

💯小结

  • 在这里插入图片描述
    本文通过对间年判断代码的逐步优化和对比,展示了从基础到进阶的逻辑表达方式。对于初学者而言,理解逻辑条件的组合与优先级是解决类似问题的关键;而对于高级开发者而言,优化代码结构提高代码复用性则是提升程序质量的重要手段。此外,通过对逻辑条件的简化语言迁移的讨论,也为读者提供了更广阔的思考维度。希望读者通过本文的分析,不仅掌握间年判断的具体实现,还能在逻辑表达代码优化方面有所收获,为应对更复杂的编程挑战奠定坚实基础。

在这里插入图片描述


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

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

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

相关文章

【深度学习】深刻理解ViT

ViT&#xff08;Vision Transformer&#xff09;是谷歌研究团队于2020年提出的一种新型图像识别模型&#xff0c;首次将Transformer架构成功应用于计算机视觉任务中。Transformer最初应用于自然语言处理&#xff08;如BERT和GPT&#xff09;&#xff0c;而ViT展示了其在视觉任务…

深度学习实验十四 循环神经网络(1)——测试简单循环网络的记忆能力和梯度爆炸实验

目录 一、数据集构建 1.1数据集的构建函数 1.2加载数据集并划分 1.3 构建Dataset类 二、模型构建 2.1嵌入层 2.2SRN层 2.3模型汇总 三、模型训练 3.1 训练指定长度的数字预测模型 3.2 损失曲线展示 四、模型评价 五、修改 附完整可运行代码 实验大体步骤&#x…

js:我要在template中v-for循环遍历这个centrerTopdata,我希望自循环前面三个就可以了怎么写

问&#xff1a; 我按在要在template中v-for循环遍历这个centrerTopdata&#xff0c;我希望自循环前面三个就可以了怎么写&#xff1f; 回答&#xff1a; 问&#xff1a; <div v-for"(item, index) in centrerTopdata.slice(0, 3)" :key"index"> d…

2、开发环境优化与创建第一个插件程序

一、创建测试用例二、vscode优化2.1 修改默认终端为普通cmd2.2 配置一键编译&&运行&&监视一、创建测试用例 使用命令yo code生成一个测试用例,选择或输入下面的内容。2. 命令的最后会提示是否使用vscode打开,选择打开就行。 3. 在当前目录下会产生helloworld…

element-ui实现table表格的嵌套(table表格嵌套)功能实现

最近在做电商类型的官网&#xff0c;希望实现的布局如下&#xff1a;有表头和表身&#xff0c;所以我首先想到的就是table表格组件。 表格组件中常见的就是&#xff1a;标题和内容一一对应&#xff1a; 像效果图中的效果&#xff0c;只用基础的表格布局是不行的&#xff0c;因…

华为TaurusDB与GaussDB:信创改造的“降本提效”之路

近年来&#xff0c;信创&#xff08;信息技术应用创新&#xff09;已成为中国国央企数字化转型的关键词。伴随这一浪潮&#xff0c;众多企业面临一个迫切问题&#xff1a;如何在兼顾性能与成本的前提下&#xff0c;完成核心系统的迁移改造&#xff1f;华为TaurusDB和GaussDB的加…

自然哲学的智能原理

一、自然哲学的智能原理 自然哲学的智能原理是一个跨学科的话题&#xff0c;它涉及哲学、自然科学、人工智能&#xff08;AI&#xff09;等多个领域的交集。自然哲学起源于古希腊&#xff0c;是探索自然界规律与现象的哲学分支&#xff0c;现代的“智能”概念则涉及到思维、学习…

硬件成本5元-USB串口采集电表数据完整方案-ThingsPanel快速入门

ThingsPanel开源物联网平台支持广泛的协议&#xff0c;灵活自由&#xff0c;本文介绍ThingsPanel通过串口来采集电表数据&#xff0c;简单易行&#xff0c;成本低廉&#xff0c;适合入门者学习试验&#xff0c;也适合一些特定的应用场景做数据采集。 适用场景&#xff1a; 降低…

在 Windows WSL 上部署 Ollama 和大语言模型:从镜像冗余问题看 Docker 最佳实践20241208

&#x1f6e0;️ 在 Windows WSL 上部署 Ollama 和大语言模型&#xff1a;从镜像冗余问题看 Docker 最佳实践 ⭐ 引言 随着大语言模型&#xff08;LLM&#xff09;和人工智能技术的迅猛发展&#xff0c;开发者们越来越多地尝试在本地环境中部署模型进行实验。 但部署过程中常…

数字化招聘系统如何帮助企业实现招聘效率翻倍提升?

众所周知&#xff0c;传统的招聘方式已经难以满足现代企业对人才的需求&#xff0c;而数字化招聘系统的出现&#xff0c;为企业提供了全新的解决方案。通过数字化招聘系统&#xff0c;企业可以自动化处理繁琐的招聘流程&#xff0c;快速筛选合适的候选人&#xff0c;从而大幅提…

【Email】基于SpringBoot3.4.x集成发送邮件功能

【Email】基于SpringBoot3.4.x集成发送邮件功能 摘要本地开发环境说明pom.xml启动类application.yaml写一个邮件模板定义模板引擎工具类定义一个邮件发送对象封装一个邮件发送器单元测试邮件模板单元测试发送邮件单元测试 邮件效果参考资料 摘要 在业务系统开发过程中&#xf…

如何在小米平板5上运行 deepin 23 ?

deepin 23 加入了 ARM64 支持&#xff0c;这里尝试将 deepin 系统刷入平板中&#xff0c;平常使用中&#xff0c;带个笔记本电脑有时候也会嫌比较麻烦&#xff0c;把 Linux 系统刷入平板中既满足了使用需要&#xff0c;又满足了轻便的需求。为什么不使用 Termux &#xff1f;虽…

java+springboot+mysql在线文件管理系统

项目介绍&#xff1a; 使用javaspringbootmysql开发的在线文件管理系统&#xff0c;系统包含管理员、使用员、监察员角色&#xff0c;功能如下&#xff1a; 管理员&#xff1a;使用员管理&#xff1b;监测员管理&#xff1b;留言管理&#xff08;回复&#xff09;&#xff1b…

网站多语言前端翻译translate.js 在vue项目中的使用方法

网站多语言前端翻译translate.js 在vue项目中的使用方法 需求 客户网站&#xff0c;想要多语言版本的&#xff0c;通常的解决办法有两种&#xff1a; 1、最直接的办法&#xff1a;编写两种&#xff0c;或者多种语言版本的网站&#xff0c;也就是一个网站有几种语言&#xff0…

《Django 5 By Example》阅读笔记:p493-p520

《Django 5 By Example》学习第 17 天&#xff0c;p493-p520 总结&#xff0c;总计 28 页。 一、技术总结 1.internationalization(国际化) vs localization(本地化) (1)18n&#xff0c;L10n&#xff0c;g11n 以前总觉得这两个缩写好难记&#xff0c;今天仔细看了下维基百科…

mycat2读写分离配置

逻辑库配置 登录mycat 创建逻辑库&#xff0c;配置数据源 mycat2安装和使用 create database mycar_db1;修改mycar_db1.schema.json配置文件 指定的数据’targetName’&#xff1a;‘prototype’&#xff0c;配置主机数据源 targetName的参数可以是数据源 也可以是集群 这儿…

.Net 多线程、异步、性能优化应用与心得

文章目录 概要多线程Thread方式创建线程:Task方式创建线程[C#5.0引入]&#xff08;推荐使用&#xff09;:线程池方式创建线程&#xff1a; 异步异步方法异步IO操作异步数据库操作异步Web请求取消异步ValueTask[C# 7.0引入]ValueTask<TResult> 和 Task 性能优化懒加载对象…

如何在项目中使用人大金仓替换mysql

文章目录 数据库连接配置调整驱动和连接字符串修改&#xff1a;用户名和密码&#xff1a; SQL 语法兼容性检查数据类型差异处理&#xff1a;函数差异&#xff1a;SQL语句客户端 SQL 交互工具 数据迁移数据库、用户移植数据迁移工具使用&#xff1a;迁移过程中的问题及解决方案 …

Docker 安装 sentinel

Docker 安装系列 1、拉取 [rootTseng ~]# docker pull bladex/sentinel-dashboard Using default tag: latest latest: Pulling from bladex/sentinel-dashboard 4abcf2066143: Pull complete 1ec1e81da383: Pull complete 56bccb36a894: Pull complete 7cc80011dc6f: Pull…

十一、容器化 vs 虚拟化-Docker 使用

文章目录 前言一、Docker Hello World二、Docker 容器使用三、Docker 镜像使用四、Docker 容器连接五、Docker 仓库管理六、Docker Dockerfile七、Docker Compose八、Docker Machine九、Swarm 集群管理 前言 Docker 使用‌ Docker 容器使用、镜像使用、容器连接、仓库管理、Do…