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

一、P8723 [蓝桥杯 2020 省 AB3] 乘法表 - 洛谷

算法代码:

#include<bits/stdc++.h>  // 包含标准库中的所有头文件,通常用于竞赛编程中简化代码
using namespace std;     // 使用标准命名空间,避免每次调用标准库函数时都要加std::
typedef long long ll;    // 定义long long类型的别名为ll,方便使用// 定义一个函数change,用于将十进制数sum转换为p进制表示的字符串
string change(ll sum, int p) {if (sum == 0) {  // 如果sum为0,直接返回"0"return "0";}string result;  // 定义一个空字符串result,用于存储转换后的结果while (sum > 0) {  // 当sum大于0时,循环进行转换int tmp = sum % p;  // 取sum对p的余数,得到当前位的值if (tmp < 10) {  // 如果余数小于10,将其转换为对应的字符(0-9)result += char('0' + tmp);} else {  // 如果余数大于等于10,将其转换为对应的字母(A-Z)result += char('A' + tmp - 10);}sum /= p;  // 将sum除以p,继续处理下一位}reverse(result.begin(), result.end());  // 将result字符串反转,得到正确的p进制表示return result;  // 返回转换后的字符串
}int main() {int p;  // 定义一个整数p,表示进制cin >> p;  // 从标准输入读取p的值for (int i = 1; i < p; i++) {  // 外层循环,i从1到p-1for (int j = 1; j <= i; j++) {  // 内层循环,j从1到ill sum = i * j;  // 计算i和j的乘积// 输出i*j的结果,并将结果转换为p进制表示cout << i << "*" << j << "=" << change(sum, p) << " ";}cout << endl;  // 每行结束后换行}return 0;  // 程序正常结束
}

1. 确定程序的功能

  • 程序的目标是生成一个乘法表,并将表中的乘积结果转换为指定的 p 进制表示。

  • 例如,输入 p = 16,程序会输出一个 16 进制的乘法表。


2. 设计核心功能

  • 进制转换:需要实现一个函数,将十进制的数转换为 p 进制的字符串表示。

    • 例如,十进制数 15 在 16 进制下表示为 "F"

  • 乘法表生成:需要嵌套循环生成乘法表,并调用进制转换函数处理每个乘积。


3. 实现进制转换函数

  • 函数名change

  • 输入参数

    • ll sum:需要转换的十进制数。

    • int p:目标进制。

  • 返回值string 类型,表示转换后的 p 进制字符串。

  • 实现逻辑

    1. 如果 sum 为 0,直接返回 "0"

    2. 使用循环不断对 sum 取模(sum % p),得到当前位的值。

    3. 根据当前位的值,将其转换为字符:

      • 如果值小于 10,转换为 '0' 到 '9'

      • 如果值大于等于 10,转换为 'A' 到 'Z'

    4. 将结果字符串反转,得到正确的 p 进制表示。


4. 实现乘法表生成

  • 输入:从用户输入读取进制 p

  • 逻辑

    1. 使用两层循环生成乘法表:

      • 外层循环控制行数(i 从 1 到 p-1)。

      • 内层循环控制列数(j 从 1 到 i)。

    2. 计算 i * j 的乘积,并调用 change 函数将其转换为 p 进制。

    3. 输出格式为 i * j = 结果,每行结束后换行。


5. 代码结构

  1. 头文件和命名空间

    • 使用 #include<bits/stdc++.h> 包含所有标准库头文件。

    • 使用 using namespace std 简化代码。

  2. 类型别名

    • 使用 typedef long long ll 定义 long long 的别名,方便使用。

  3. 进制转换函数

    • 实现 change 函数,完成十进制到 p 进制的转换。

  4. 主函数

    • 读取用户输入的 p

    • 使用嵌套循环生成乘法表,并调用 change 函数处理乘积。

    • 输出结果。

二、P8734 [蓝桥杯 2020 国 A] 奇偶覆盖 - 洛谷

(国赛A组的题,我就直接跳过了,B组没学过这些,所以直接看大佬们的题解,等日后有实力再看)

题解:

算法代码: 

#include <bits/stdc++.h>  // 包含标准库中的所有头文件,通常用于竞赛编程中简化代码
#define ll long long     // 定义宏,将 long long 类型简化为 ll
using namespace std;     // 使用标准命名空间,避免每次调用标准库函数时都要加 std::
const int N = 2e5+5;     // 定义常量 N,表示数组的最大大小int n, tot, a[N<<2];     // n: 矩形数量;tot: 离散化后的坐标数量;a: 存储所有 x 坐标
ll ans1, ans2;           // ans1: 统计奇数次覆盖的面积;ans2: 统计偶数次覆盖的面积struct edge {            // 定义扫描线的边结构体int y, x1, x2, k;    // y: 边的 y 坐标;x1, x2: 边的左右 x 坐标;k: 边的类型(1 表示下边,-1 表示上边)
} e[N];                  // e: 存储所有边struct tree {            // 定义线段树结构体int l, r;            // l, r: 当前节点表示的区间范围ll s1, s2, cnt;      // s1: 奇数次覆盖的长度;s2: 偶数次覆盖的长度;cnt: 当前区间的覆盖次数
} t[N<<3];               // t: 线段树数组,开 8 倍空间void update(int p) {     // 更新线段树节点 p 的信息if (!t[p].cnt) {     // 如果当前区间没有被覆盖t[p].s1 = t[p<<1].s1 + t[p<<1|1].s1;  // s1 为左右子节点的 s1 之和t[p].s2 = t[p<<1].s2 + t[p<<1|1].s2;  // s2 为左右子节点的 s2 之和return;}if (t[p].cnt & 1) {  // 如果当前区间被奇数次覆盖t[p].s2 = t[p<<1].s1 + t[p<<1|1].s1;  // s2 为左右子节点的 s1 之和t[p].s1 = a[t[p].r+1] - a[t[p].l] - t[p].s2;  // s1 为区间总长度减去 s2} else {            // 如果当前区间被偶数次覆盖t[p].s1 = t[p<<1].s1 + t[p<<1|1].s1;  // s1 为左右子节点的 s1 之和t[p].s2 = a[t[p].r+1] - a[t[p].l] - t[p].s1;  // s2 为区间总长度减去 s1}
}void build(int p, int l, int r) {  // 构建线段树t[p].l = l, t[p].r = r;       // 初始化当前节点的区间范围if (l == r) return;           // 如果是叶子节点,直接返回int mid = (l + r) >> 1;       // 计算中点build(p<<1, l, mid);          // 递归构建左子树build(p<<1|1, mid+1, r);      // 递归构建右子树
}void change(int p, int l, int r, int x) {  // 修改线段树的区间 [l, r],x 为修改值(1 或 -1)if (l <= t[p].l && t[p].r <= r) {  // 如果当前节点被区间 [l, r] 完全覆盖t[p].cnt += x;            // 更新当前节点的覆盖次数update(p);                // 更新当前节点的信息return;}int mid = (t[p].l + t[p].r) >> 1;  // 计算中点if (l <= mid) change(p<<1, l, r, x);  // 递归修改左子树

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

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

相关文章

数据结构5(初):排序

目录 1、排序的概念以及常见的排序算法 1.1、排序的概念 1.2、常见的排序算法 2、常见排序算法的实现 2.1、插入排序 2.1.1、直接插入排序 2.1.2、希尔排序 2.2、选择排序 2.2.1、直接选择排序 2.2.2、堆排序 2.3、交换排序 2.3.1、冒泡排序 2.3.2、快速排序 2.3.…

VS2022中通过VCPKG安装的ceres之后调试ceres的例程设置

1.采用C20. vcpkg中设置: 2.增加预处理宏: GLOG_USE_GLOG_EXPORT 3.屏蔽sdl错误 在 项目-属性-C/C -命令行中添加 /sdl /w34996 #include "ceres/ceres.h" //#include <iostream> //#include<glog/logging.h>using ceres::AutoDiffCostFunction; usi…

Pydantic字段级校验:解锁@validator的12种应用

title: Pydantic字段级校验:解锁@validator的12种应用 date: 2025/3/23 updated: 2025/3/23 author: cmdragon excerpt: Pydantic校验系统支持通过pre验证器实现原始数据预处理,在类型转换前完成字符清洗等操作。格式验证涵盖正则表达式匹配与枚举值约束,确保护照编号等字…

函数递归和迭代

1.什么是递归&#xff1f; 在C语言中递归就是自己调用自己。 看一下简单函数的递归&#xff1a; 上面的代码实现演示一下函数的递归&#xff0c;最终是会陷入死循环的&#xff0c;栈溢出 。 1.1递归的思想&#xff1a; 把一个大型的问题一步一步的转换成一个个小的子问题来解…

发票查验/发票验真如何用Java实现接口调用

一、什么是发票查验&#xff1f;发票验真接口&#xff1f; 输入发票基本信息发票代码、发票号码、开票日期、校验码后6位、不含税金额、含税金额&#xff0c;核验发票真伪。 该接口也适用于机动车、二手车销售发票、航空运输电子客票、铁路电子客票等。 二、如何用Java实现接口…

AM32-MultiRotor-ESC项目固件编译和烧录方法介绍

AM32-MultiRotor-ESC项目固件编译和烧录方法介绍 &#x1f4cd;AM32-MultiRotor-ESC项目地址:https://github.com/AlkaMotors/AM32-MultiRotor-ESC-firmware&#x1f388;Updater with V8 Bootloader&#xff1a; https://github.com/AlkaMotors/F051_Bootloader_Updater&#…

HarmonyOS:@AnimatableExtend 装饰器自学指南

在最近的项目开发中&#xff0c;我遇到了需要实现复杂动画效果的需求。在探索解决方案的过程中&#xff0c;我发现了 AnimatableExtend 装饰器&#xff0c;它为实现动画效果提供了一种非常灵活且强大的方式。然而&#xff0c;在学习这个装饰器的过程中&#xff0c;我发现相关的…

Windows server 2022域控制服务器的配置

Windows server 2022介绍 一、核心特性与改进 安全核心服务器&#xff08;Secured-Core Server&#xff09; 硬件级安全&#xff1a;支持基于硬件的安全功能&#xff08;如TPM 2.0、Secure Boot、基于虚拟化的安全防护VBS&#xff09;&#xff0c;防止固件攻击。受信任的启动链…

C++语法之模板函数和模板类

模板函数是什么&#xff1f;就是不指定类型的函数&#xff0c;不指定类型如何写代码?所以得用到模板&#xff0c;可以先用模板代替&#xff0c;就好像方程式&#xff0c;先用x,y代替一样。 它的写法是这样&#xff0c;定义函数时&#xff0c;开头加一句:(其中的T就相当于x,y之…

时序分析笔记

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、周期约束 二、建立时间和保持时间 三、时序路径 四、时序模型 前言 约束文件笔记&#xff0c;傅里叶的猫的视频。 一、周期约束 时序约束就是告诉软件输…

六十天前端强化训练之第二十八天之Composition 函数完全指南

欢迎来到编程星辰海的博客讲解 看完可以给一个免费的三连吗&#xff0c;谢谢大佬&#xff01; 目录 一、核心概念解析 1.1 什么是 Composition 函数 1.2 为什么需要封装 1.3 设计原则 二、实战案例&#xff1a;鼠标跟踪器 2.1 未封装版本 2.2 封装后的 Composition 函数…

MySQL 锁机制详解

MySQL 锁机制详解 5.1 概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中&#xff0c;除传统的计算资源&#xff08;CPU、 RAM、I/O&#xff09;的争用以外&#xff0c;数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有 效性是所有数…

常见中间件漏洞攻略-Apache篇

漏洞名称&#xff1a;Apache HTTP Server 路径穿越漏洞-CVE-2021-41773 第一步&#xff1a;拉取环境、启动环境 #拉取环境 docker pull blueteamsteve/cve-2021-41773:no-cgidhttp://121.40.229.129:8080#启动环境 docker run -dit -p 8080:80 blueteamsteve/cve-2021-41773:n…

站群服务器是什么意思呢?

站群服务器是一种专门为托管和管理多个网站而设计的服务器&#xff0c;其核心特点是为每个网站分配独立的IP地址。这种服务器通常用于SEO优化、提高网站权重和排名&#xff0c;以及集中管理多个网站的需求。以下是站群服务器的详细解释&#xff1a; 一、站群服务器的定义 站群…

Excel 小黑第22套

对应大猫22 新建一行&#xff0c;输入第一个人名字&#xff0c; 填充 -快速填充 修改员工编号&#xff08;1—001&#xff09;&#xff1a;选中所有员工编号&#xff0c;开始 -数据组 -自定义数字格式 000 在所有空表格单元格中输入数字0&#xff1a;选中修改的表格范围&#…

多传感器融合 SLAM LVI-SAM

目录 LVI-SAM 简介 A. 系统概述 B. 视觉惯导系统 C.雷达惯导系统 LVI-SAM 安装编译 编译 LVI-SAM 常见问题 LVI-SAM 工程化建议 LVI-SAM 简介 源码地址:https://github.com/TixiaoShan/LVI-SAM 如无法下载,换用 gitee 版本:https://gitee.com/inf_lee/LVI-SAM 改进…

Linux shell脚本3-if语句、case语句、for语句、while语句、until语句、break语句、continue语句,格式说明及程序验证

目录 1.if 控制语句 1.1 if 语句格式 1.2 程序验证 2.case语句 2.1case语句格式 2.2程序验证 2.2.1 终端先执行程序&#xff0c;在输入一个数 2.2.2 终端执行程序时同时输入一个预设变量 2.2.3 case带有按位或运算和通配符匹配 3.for语句 3.1for语句格式 3.2程序验…

图解模糊推理过程(超详细步骤)

我们前面已经讨论了三角形、梯形、高斯型、S型、Z型、Π型6种隶属函数&#xff0c;下一步进入模糊推理阶段。 有关六种隶属函数的特点在“Pi型隶属函数&#xff08;Π-shaped Membership Function&#xff09;的详细介绍及python示例”都有详细讲解&#xff1a;https://lzm07.b…

001-JMeter的安装与配置

1.前期准备 下载好JMeter : https://jmeter.apache.org/download_jmeter.cgi 下载好JDK : :Java Downloads | Oracle 中国 下载图中圈蓝的JMeter和JDK就行&#xff0c;让它边下载&#xff0c;我们边往下看 2.为什么要下载并安装JDK ? JMeter 是基于 Java 开发的工具&#…

英伟达有哪些支持AI绘画的 工程

英伟达在AI绘画领域布局广泛&#xff0c;其自研工具与第三方合作项目共同构建了完整的技术生态。以下是其核心支持AI绘画的工程及合作项目的详细介绍&#xff1a; 一、英伟达自研AI绘画工具 1. GauGAN系列 技术特点&#xff1a;基于生成对抗网络&#xff08;GAN&#xff09;&…