C/C++蓝桥杯算法真题打卡(Day5)

一、P8772 [蓝桥杯 2022 省 A] 求和 - 洛谷

算法代码:

#include<bits/stdc++.h>  // 包含标准库中的所有头文件,方便编程
using namespace std;     // 使用标准命名空间,避免每次调用标准库函数时都要加 std::int main() {int n;               // 声明一个整数变量 n,用于存储输入的整数个数cin >> n;            // 从标准输入读取 n 的值vector<int> a(n);    // 声明一个大小为 n 的整数向量 a,用于存储输入的 n 个整数for(int i = 0; i < n; i++) {  // 循环 n 次,读取每个整数cin >> a[i];     // 将输入的整数存储到向量 a 的第 i 个位置}vector<long long> sum(n + 1, 0);  // 声明一个大小为 n+1 的长整型向量 sum,用于存储前缀和,初始化为 0for(int i = 0; i < n; i++) {      // 循环 n 次,计算前缀和sum[i + 1] = sum[i] + a[i];   // 计算前缀和:sum[i+1] = sum[i] + a[i]}long long s = 0;     // 声明一个长整型变量 s,用于存储最终的两两相乘再相加的和,初始化为 0for(int i = 0; i < n; i++) {      // 循环 n 次,计算两两相乘再相加的和s += a[i] * (sum[n] - sum[i + 1]);  // 累加 a[i] 与后面所有元素的乘积}cout << s;           // 输出最终的结果 sreturn 0;            // 返回 0,表示程序正常结束
}

 关键点解释:

  1. 前缀和数组 sum

    • sum[i] 表示数组 a 的前 i 个元素的和。

    • sum[i + 1] = sum[i] + a[i] 用于计算前缀和。

  2. 两两相乘再相加的和 s

    • sum[n] - sum[i + 1] 表示从 a[i+1] 到 a[n-1] 的和。

    • a[i] * (sum[n] - sum[i + 1]) 表示 a[i] 与后面所有元素的乘积之和。

    • 通过累加这些乘积,得到最终的结果 s

  3. 时间复杂度

    • 该算法的时间复杂度为 O(n),因为只需要遍历数组两次(一次读取输入,一次计算前缀和和最终结果)。

  4. 空间复杂度

    • 使用了额外的 sum 数组,空间复杂度为 O(n)。

二、 P8716 [蓝桥杯 2020 省 AB2] 回文日期 - 洛谷

算法代码: 

#include<bits/stdc++.h>  // 包含标准库中的所有头文件,方便编程
using namespace std;     // 使用标准命名空间,避免每次调用标准库函数时都要加 std::int months[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};  // 打个月份表,存储每个月的天数// 判断日期是否合法
bool check_valid(int date) {int year = date / 10000;  // 提取年份int month = date % 10000 / 100;  // 提取月份int day = date % 100;  // 提取日if (day == 0 || month <= 0 || month > 12) return false;  // 显然的不合法情况if (month != 2 && day > months[month]) return false;  // 月份不是2,day不合法就不合法if (month == 2) {  // 月份是2if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {  // 判断闰年if (day > 29) return false;  // 是闰月,day必须<=29} else if (day > 28) return false;  // 是平月,day必须<=28}return true;  // 日期合法
}// 判断字符串是否是回文
bool check_huiwen(string s) {int len = s.size();  // 获取字符串长度for (int i = 0, j = len - 1; i < j; i++, j--)  // i从前往后,j从后往前扫一遍if (s[i] != s[j]) return false;  // 不对称,就不回文return true;  // 字符串是回文
}// 判断字符串是否是ABABBABA型回文
bool check_ABAB(string s) {if (check_huiwen(s)) {  // 首先它得是个回文数// 接下来只需判断前4位是否合法if (s[0] != s[2] || s[1] != s[3] || s[0] == s[1]) return false;  // 结合ABABBABA思考return true;  // 是ABABBABA型回文}return false;  // 不是ABABBABA型回文
}int main() {int n; cin >> n;  // 读取输入的整数nbool flag = 0;  // 标记是否已经找到第一个回文数for (int i = n + 1; ; i++) {  // 从n+1开始枚举回文数if (check_valid(i)) {  // 判断日期是否合法string s = to_string(i);  // 将整数转换为字符串if (check_huiwen(s) && !flag) {  // 输出第一个回文数cout << i << endl;flag = 1;  // 标记已经找到第一个回文数}if (check_ABAB(s)) {  // 输出第一个特殊回文数cout << i;return 0;  // 找到特殊回文数后结束程序}}}return 0;  // 程序正常结束
}

 代码思路

        这段代码的主要目标是找到从给定日期 n 开始的第一个回文日期和第一个符合特定格式(ABABBABA)的回文日期。以下是代码的思路和实现步骤:


1. 准备工作

  • 包含头文件和命名空间

    • #include<bits/stdc++.h>:包含所有标准库头文件,方便使用各种数据结构和函数。

    • using namespace std;:使用标准命名空间,避免每次调用标准库函数时都要加 std::

  • 月份表

    • int months[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

      • 用一个数组存储每个月的天数,方便后续判断日期的合法性。

      • 注意:2月的天数需要根据闰年动态调整。


2. 判断日期是否合法

  • 函数 check_valid(int date)

    • 输入:一个整数 date,表示日期,格式为 YYYYMMDD

    • 功能

      1. 提取年、月、日:

        • year = date / 10000:提取年份。

        • month = date % 10000 / 100:提取月份。

        • day = date % 100:提取日。

      2. 检查日期的合法性:

        • 如果 day == 0 或 month <= 0 或 month > 12,日期不合法。

        • 如果月份不是2月,且 day 超过该月的天数,日期不合法。

        • 如果是2月:

          • 判断是否是闰年:

            • 闰年规则:能被4整除但不能被100整除,或者能被400整除。

          • 如果是闰年,2月最多29天;否则最多28天。

    • 返回值:如果日期合法,返回 true;否则返回 false


3. 判断字符串是否是回文

  • 函数 check_huiwen(string s)

    • 输入:一个字符串 s,表示日期。

    • 功能

      • 使用双指针法,从字符串的两端向中间扫描,判断字符是否对称。

      • 如果所有字符都对称,则是回文。

    • 返回值:如果是回文,返回 true;否则返回 false


4. 判断字符串是否是ABABBABA型回文

  • 函数 check_ABAB(string s)

    • 输入:一个字符串 s,表示日期。

    • 功能

      1. 首先调用 check_huiwen(s) 判断是否是回文。

      2. 如果是回文,进一步检查是否符合ABABBABA格式:

        • ABABBABA格式要求:

          • 第1位 == 第3位。

          • 第2位 == 第4位。

          • 第1位 != 第2位。

    • 返回值:如果符合ABABBABA格式,返回 true;否则返回 false


5. 主函数逻辑

  • 输入

    • 读取整数 n,表示起始日期。

  • 初始化

    • bool flag = 0;:用于标记是否已经找到第一个回文日期。

  • 枚举日期

    • 从 n + 1 开始,逐个枚举日期 i

    • 对每个日期 i

      1. 调用 check_valid(i) 判断日期是否合法。

      2. 如果合法:

        • 将日期转换为字符串 s

        • 调用 check_huiwen(s) 判断是否是回文:

          • 如果是回文且 flag == 0,输出该日期,并设置 flag = 1

        • 调用 check_ABAB(s) 判断是否是ABABBABA型回文:

          • 如果是,输出该日期并结束程序。

  • 结束条件

    • 找到第一个ABABBABA型回文日期后,程序结束。


6. 总结

  • 目标

    • 找到从 n + 1 开始的第一个回文日期。

    • 找到从 n + 1 开始的第一个ABABBABA型回文日期。

  • 实现方法

    • 通过枚举日期,依次检查日期的合法性、回文性和ABABBABA格式。

    • 使用辅助函数简化逻辑。

  • 时间复杂度

    • 最坏情况下需要枚举大量日期,但由于日期范围有限,实际运行时间较短。

  • 空间复杂度

    • 只使用了少量变量和数组,空间复杂度为 O(1)。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【大模型基础_毛玉仁】3.5 Prompt相关应用

目录 3.5 相关应用3.5.1 基于大语言模型的Agent3.5.2 数据合成3.5.3 Text-to-SQL3.5.4 GPTs 3.5 相关应用 Prompt工程应用广泛&#xff0c;能提升大语言模型处理基础及复杂任务的能力&#xff0c;在构建Agent、数据合成、Text-to-SQL转换和设计个性化GPTs等方面不可或缺。 . …

主成分分析PCA与奇异值分解SVD

线性代数 SVD 奇异值分解&#xff08;Singular Value Decomposition&#xff0c;简称 SVD&#xff09;是线性代数中的一种基本工具&#xff0c;它将任意一个 (m * n) 矩阵 (A) 分解成三个简单矩阵的乘积&#xff0c;即 其中&#xff1a; (U) 是一个 (m*m) 的正交&#xff08…

自主代理的摩尔定律:AI 的指数级革命

图像由 Gemini 生成 前言&#xff1a;AI 正在以超过摩尔定律的速度迅速提升其自主工作能力&#xff0c;研究显示&#xff0c;AI 能够可靠完成的任务时长正以每 7 个月翻一倍的速度增长。这种指数级的发展趋势意味着&#xff0c;AI 不再只是应对简单问答或短任务的工具&#xff…

气膜文化馆:打造沉浸式文娱新空间—轻空间

演唱会、展览、音乐剧……都能办&#xff1f; 当然&#xff01;气膜文化馆不仅适用于体育赛事&#xff0c;在文化娱乐方面同样大放异彩&#xff01; 声学优化&#xff0c;打造极致听觉体验 气膜文化馆采用专业声学设计&#xff0c;避免传统场馆的回声干扰&#xff0c;提供更清…

【数据标准】数据标准化框架体系-对象类数据标准

导读&#xff1a;对象类数据标准化框架通过统一数据定义、分类和标记&#xff0c;解决数据孤岛与不一致问题&#xff0c;支撑数据分析、AI应用与合规需求。企业需结合自身业务特性&#xff0c;灵活选择国际标准&#xff08;如ISO&#xff09;、行业规范或自建体系&#xff0c;并…

【江协科技STM32】软件SPI读写W25Q64芯片(学习笔记)

SPI通信协议及S为5Q64简介&#xff1a;【STM32】SPI通信协议&W25Q64Flash存储器芯片&#xff08;学习笔记&#xff09;-CSDN博客 STM32与W25Q64模块接线&#xff1a; SPI初始化&#xff1a; 片选SS、始终SCK、MOSI都是主机输出引脚&#xff0c;输出引脚配置为推挽输出&…

C 语 言 --- 扫 雷 游 戏(初 阶 版)

C 语 言 --- 扫 雷 游 戏 初 阶 版 代 码 全 貌 与 功 能 介 绍扫雷游戏的功能说明游 戏 效 果 展 示游 戏 代 码 详 解game.htest.cgame.c 总结 &#x1f4bb;作 者 简 介&#xff1a;曾 与 你 一 样 迷 茫&#xff0c;现 以 经 验 助 你 入 门 C 语 言 &#x1f4a1;个 人 主…

数据库基础知识

目录 一、什么是数据库&#xff1f; 二、基本使用方法 &#xff08;1&#xff09;启动服务器进程 &#xff08;2&#xff09;连接服务器 &#xff08;3&#xff09;基本sql语句 三、MySQL架构 四、SQL语句分类 五、存储引擎是什么 一、什么是数据库&#xff1f; 数据库…

在线生成自定义二维码

在线生成自定义二维码 1. 引言 二维码已成为现代互联网的重要工具&#xff0c;广泛应用于链接分享、支付、身份认证等场景。然而&#xff0c;很多在线二维码生成工具功能有限&#xff0c;难以满足个性化需求。如果你需要 自定义颜色、Logo、不同形状的二维码&#xff0c;那么…

DeepSeek处理多模态数据的技术要点和实现方式

DeepSeek具备处理多模态数据的能力&#xff0c;以下是相关技术要点和实现方式。 1. ‌多模态模型架构‌ ‌单流/双流网络‌&#xff1a;通过将文本和图像输入统一编码器&#xff08;单流&#xff09;或分别编码后交互&#xff08;双流&#xff09;实现模态融合‌。‌预训练模…

系统架构设计知识体系总结

1.技术选型 1.什么是技术选型&#xff1f; 技术选型是指评估和选择在项目或系统开发中使用的最合适的技术和工具的过程。这涉及考虑基于其能力、特性、与项目需求的兼容性、可扩展性、性能、维护和其他因素的各种可用选项。技术选型的目标是确定与项目目标相符合、能够有效解…

数智读书笔记系列022《算力网络-云网融合2.0时代的网络架构与关键技术》读书笔记

一、书籍核心价值与定位 1.1 书籍概述:中国联通研究院的权威之作 《算力网络 —— 云网融合 2.0 时代的网络架构与关键技术》由中国联通研究院算力网络攻关团队精心撰写,是业界首部系统性探讨云网融合 2.0 与算力网络的专著。在云网融合从 1.0 迈向 2.0 的关键节点,本书的…

知识图谱中NLP新技术

知识图谱与自然语言处理&#xff08;NLP&#xff09;的结合是当前人工智能领域的前沿方向&#xff0c;其技术发展呈现多维度融合与场景深化的特点。以下从核心技术突破、应用场景创新及未来趋势三个层面&#xff0c;系统梳理知识图谱中NLP的最新进展&#xff1a; 一、核心技术突…

ASP.NET Web的 Razor Pages应用,配置热重载,解决.NET Core MVC 页面在更改后不刷新

Razor Pages应用&#xff0c;修改页面查看修改效果&#xff0c;如果没有热重载&#xff0c;改一句话跑一次&#xff0c;这个活就没法干了。 1、VS2022中的NuGet中安装RuntimeCompilation Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation 需要配套你的.net sdk版本&#x…

DeepSeek(8):结合Kimi-PPT助手一键生成演示报告

1 生成内容 在Deepseek中生成内容&#xff1a; 帮我创建年度计划&#xff0c;描述《智能枕头》产品的如何在全国销售&#xff0c;计划切分到每个月。从而让我们的老板和团队对报告充满信息。输出的内容我需要放到ppt中进行展示。 使用Deepseek R1模型&#xff0c;如下&#x…

到底爱不爱我

L2-3 到底爱不爱我 古代少女有了心上人时&#xff0c;会悄悄折一条树枝&#xff0c;揪那枝上的叶子&#xff0c;揪一片叶子念一句“爱我”&#xff0c;再揪一片念一句“不爱我”…… 这样揪落最后一片叶子的时候&#xff0c;看看是停在“爱”还是“不爱”。 但聪明的慧娘一眼洞…

网络华为HCIA+HCIP 网络编程自动化

telnetlib介绍 telnetlib是Python标准库中的模块。它提供了实现Telnet功能的类telnetlib.Telnet。这里通过调用telnetlib.Telnet类里的不同方法实现不同功能。 配置云

【10】高效存储MongoDB的用法

目录 一、什么是MongoDB 二、准备工作 &#xff08;1&#xff09;安装MongoDB ​&#xff08;2&#xff09;安装pymongo库 三、连接MongoDB 四、指定数据库 五、指定集合 六、插入数据 &#xff08;1&#xff09; insert 方法 &#xff08;2&#xff09;insert_one(…

datawhale组队学习--大语言模型—task4:Transformer架构及详细配置

第五章 模型架构 在前述章节中已经对预训练数据的准备流程&#xff08;第 4 章&#xff09;进行了介绍。本章主 要讨论大语言模型的模型架构选择&#xff0c;主要围绕 Transformer 模型&#xff08;第 5.1 节&#xff09;、详细 配置&#xff08;第 5.2 节&#xff09;、主流架…

Tomcat虚拟主机配置详解:Centos环境下多域名部署(详细教程!)

&#x1f3e1;作者主页&#xff1a;点击&#xff01; Tomcat服务器&#x1f4dd;专栏&#xff1a;点击&#xff01; &#x1f427;Linux高级管理防护和群集专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2025年3月18日14点14分 最近在折腾 Tomcat 的时候&…