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

news2025/1/16 2:48:27

在这里插入图片描述

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳]
本文专栏: 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)中同样适用,逻辑表达基本不变,仅需调整语法。

💯小结

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

在这里插入图片描述


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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云和恩墨 zCloud 与华为云 GaussDB 完成兼容性互认证

近日&#xff0c;云和恩墨&#xff08;北京&#xff09;信息技术有限公司&#xff08;以下简称&#xff1a;云和恩墨&#xff09;的多元数据库智能管理平台 zCloud 与华为云计算技术有限公司&#xff08;以下简称&#xff1a;华为云&#xff09;的 GaussDB 数据库完成了兼容性互…

HtmlRAG开源,RAG系统联网搜索能力起飞~

网络是RAG系统中使用的主要外部知识来源&#xff0c;许多商业系统&#xff0c;如ChatGPT和Perplexity&#xff0c;都使用网络搜索引擎作为他们的主要检索系统。传统的RAG系统将网页的HTML内容转换为纯文本后输入LLM&#xff0c;这会导致结构和语义信息的丢失。 HTML转换为纯文…

Android显示系统(10)- SurfaceFlinger内部结构

一、前言&#xff1a; 之前讲述了native层如何使用SurfaceFlinger&#xff0c;我们只是看到了简单的API调用&#xff0c;从本文开始&#xff0c;我们逐步进行SurfaceFlinger内部结构的分析。话不多说&#xff0c;莱茨狗~ 二、类图&#xff1a; 2.1、总体架构&#xff1a; 先…

PPT技巧:将幻灯片里的图片背景设置为透明

在PPT中添加了图片&#xff0c;想要将图片中的背景设置为透明或者想要抠图&#xff0c;有什么方法吗&#xff1f;今天分享两个方法。 方法一&#xff1a; 添加图片&#xff0c;选中图片之后&#xff0c;点击【图片格式】功能&#xff0c;点击最左边的【删除背景】 PPT会自动帮…

以太网链路详情

文章目录 1、交换机1、常见的概念1、冲突域2、广播域3、以太网卡1、以太网卡帧 4、mac地址1、mac地址表示2、mac地址分类3、mac地址转换为二进制 2、交换机的工作原理1、mac地址表2、交换机三种数据帧处理行为3、为什么会泛洪4、转发5、丢弃 3、mac表怎么获得4、同网段数据通信…

CNCF云原生生态版图

CNCF云原生生态版图 概述什么是云原生生态版图如何使用生态版图 项目和产品&#xff08;Projects and products&#xff09;会员&#xff08;Members&#xff09;认证合作伙伴与提供商&#xff08;Certified partners and providers&#xff09;无服务&#xff08;Serverless&a…

每日计划-1212

1. 完成 SQL1 查询所有列 2. 八股部分 1) C 中多态性在实际项目中的应用场景有哪些&#xff1f; &#xff08;1&#xff09;图形绘制系统 场景描述&#xff1a;在一个图形绘制软件中&#xff0c;可能有多种图形&#xff0c;如圆形、矩形、三角形等。每种图形都需要有自己的…

Autosar CP RTE:一个例子简要介绍工作原理

以下是一个示例&#xff0c;展示如何通过AUTOSAR的RTE机制利用配置&#xff08;ARXML文件&#xff09;来实现软件组件集成&#xff0c;包含对应的C源代码以及模拟自动生成的RTE框架代码的示例。请注意&#xff0c;实际的AUTOSAR项目会复杂得多&#xff0c;这里只是一个简化且示…

动手学深度学习---预备知识

深度学习是关于优化的学习。对一个带有参数的模型&#xff0c;找到其中能拟合数据最好的模型。 一、数据操作 张量&#xff1a;表示一个由数值组成的数组&#xff0c;这个数组可能有多个维度。具有一个轴的张量对应数学上的向量&#xff0c;具有两个轴的张量对应数学上的矩阵&…

频域采样引起Gibbs效应——频域采样FIR滤波器设计的主要问题(答作者问)

还是这个图&#xff0c;我不明白廖老师为什么纠结这几个图不放过。Rafael Gonzalez的《数字图像处理》概念不清楚的地方&#xff0c;我就直接放过了&#xff0c;我为什么要和基础差的人纠结。 现在的问题是图(c )到图(d)为什么会产生Gibbs效应。这与补零&#xff08;哪怕是异想…

《Keras3 minist 手写数字AI模型训练22秒精度达到:0.97》

《Keras3 minist 手写数字AI模型训练22秒精度达到&#xff1a;0.97》 一、修改源码加上如下两条代码二、源码修改如下三、Keras3 minist 训练22秒结束&#xff0c;训练过程截图四、Keras3 minist 源码截图 一、修改源码加上如下两条代码 import os os.environ["KERAS_BAC…

R语言——缺失值处理

目录 缺失数据 1 R中的缺失值 2查看缺失值is.na() 3 去除缺失值 1 R中的缺失值 在R中&#xff0c;NA代表缺失值&#xff0c;NA是不可用&#xff08;可能是0&#xff0c;可能是其他值&#xff0c;NA是未知的&#xff09;&#xff0c;notavailable的简称&#xff0c;用来存储…

找不到共享打印机0x00000bc4报错多种解决方法

在访问共享打印机提示"找不到打印机0x00000bc4"解决方法怎么解决&#xff1f;今天小编就教大家找不到共享打印机0x00000bc4报错多种解决方法 找不到共享打印机0x00000bc4报错多种解决方法原因分析&#xff1a; 1、检查打印机驱动&#xff1a;一般出现这种情况是由于打…

vulhub复现CVE-2021-44228log4j漏洞

目录 一&#xff1a;漏洞概述 二&#xff1a;漏洞原理 三&#xff1a;漏洞利用 lookup功能&#xff1a; JNDI解析器&#xff1a; ldap服务&#xff1a; RMI&#xff1a; 四&#xff1a;漏洞复现 4.1靶场 4.2dnslog测试 4.3部署jndi-injection-exploit 4.4打开监听端口 4.5触发请…

论文笔记:Treat Visual Tokens as Text? But Your MLLM Only Needs Fewer Efforts to See

2024 10月的arxiv 1 主要idea 针对多模态大模型&#xff08;如LLaVA&#xff09;&#xff0c;提出了一系列高效的剪枝策略 在显著降低计算开销&#xff08;多达 88%&#xff09;的同时&#xff0c;保持了模型在多模态任务中的性能表现 2 目前的问题 与文本 token 相比&…

MySQL常用运维操作(一):快速复制一张表

假设有如下表结构&#xff1a; -- 创建表db1.t create database db1; use db1; create table t(id int primary key,a int, b int, index(a))engineinnodb;-- 向表t写入1000行数据 delimiter ;;create procedure idata()begindeclare i int;set i1;while(i<1000)doinsert i…

怎么确定目标主机,整个网络过程

怎么确定目标主机&#xff0c;整个网络过程 简单来说&#xff0c; 就是归结于计算机间怎么进行通信&#xff0c; &#xff08;原始方法&#xff09; 简单点直接加网线&#xff0c;但 一个设备的网口肯定是有限的 当相连的设备多了&#xff0c;整个网线将变得十分复杂&#…

机器视觉与OpenCV--01篇

计算机眼中的图像 像素 像素是图像的基本单位&#xff0c;每个像素存储着图像的颜色、亮度或者其他特征&#xff0c;一张图片就是由若干个像素组成的。 RGB 在计算机中&#xff0c;RGB三种颜色被称为RGB三通道&#xff0c;且每个通道的取值都是0到255之间。 计算机中图像的…

【H3CNE邓方鸣】配置链路聚合+2024.12.11

文章目录 链路聚合作用负载分担分类静态聚合动态聚合 链路聚合作用 定义&#xff1a;把连接到统一交换机上的多个物理端口捆绑为一个逻辑端口 增加链路带宽&#xff1a;聚合组内只要还有物理端口存活&#xff0c;链路就不会中断 提供链路可靠性&#xff1a;避免了STP计算&…

Java 基础知识——part 1

1.目前Java平台有三种版本&#xff1a; Java SE&#xff1a;用于开发桌面应用程序 Java EE&#xff1a;用于编写企业级应用程序 Java ME&#xff1a;用于开发设备应用程序 2.Applet可嵌入Web文档的一种小型程序&#xff0c;因网络传输速度关系都很短小 3.Appilication&…