当前位置: 首页 > news >正文

蓝桥杯-洛谷刷题-day4(C++)

目录

1.高精度乘法

        i.P1303 A*B Problem高精度乘法

2.P4924 [1007] 魔法少女小Scarlet

        i.题目

        ii.代码

3.二维数组

        i.二维数组的建立

        ii.备份

        iii.二维数组的转动

4.指令的及时处理


1.高精度乘法

        即,将每一位变为数组中的一位,并在数组中以倒序排列,

        如12,就被化为b[1] = 2, b[2] = 1。

        乘法就是用两个数组里的每一位(暂称为x)与另外一个数组的所有数相乘之后,错位相加(错几位相加,取决于x 对应的数组下标,下标为2,说明这个x 是十位上的数,需要错一位)

        i.P1303 A*B Problem高精度乘法

#include <iostream>  
#include <string>using namespace std;void testlan()
{string a1, b1;//a, b储存两个要相乘的数,c储存结果int a[10001] = { 0 }, b[10001] = { 0 }, c[10001] = { 0 }, lena, lenb;//先用字符串接收,便于获取数字长度,更好的掌控数组的有效长度cin >> a1 >> b1;//得到两个数字的长度lena = a1.length(); lenb = b1.length();//将这两个数字的每一位存储在数组中;倒序,是为了便于之后按个位开始进行计算,抛弃a[0],方便后续的运算for (int i = 1; i <= lena; i++)a[i] = a1[lena - i] - '0';for (int i = 1; i <= lenb; i++)b[i] = b1[lenb - i] - '0';//每一位都要和另一个数的所有位相乘,正好是一个嵌套循环//乘法中,乘完之后,是一个错位相加,用外循环稳定的递增,正好可以模拟,乘完之后的逐层错位for (int i = 1; i <= lena; i++)for (int j = 1; j <= lenb; j++){c[i + j - 1] += a[i] * b[j]; //cout << c[i + j - 1] << endl;}//计算结果的长度一定小于原来两个数的长度之和int len = lena + lenb;//之后,对c中,每一位超过10的,进行递进处理for (int i = 1; i < len; i++){if (c[i] > 9){c[i + 1] += c[i] / 10;c[i] %= 10;}}//读位:从这个最长位置往前读位,直到读到有效数字,即可得到c的长度while (c[len] == 0 && len > 1)len--;for (int i = len; i >= 1; i--)cout << c[i];/*读位+输出的优化,引入一个判别标识,将读位与输出结合bool flag = 0;while(len > 1){if(c[len] != 0)flag = 1;if(flag)cout << c[len];len--;}//当读位读到第一个非零数之后,将标识设置为真,意味着读到了,这个数的最高位,最高位的数不可能为0,之后无论读到的数是否为零都会输出*/}int main()
{testlan();return 0;
}

拓:高精度阶乘求和,就是高精乘法的特殊形式,每一次都用一个数,来乘以另外一个结果的所有位的数,从低到高,1!+2!。。。,循环中,用一个数组b[]存储阶乘结果(i的阶乘),另一个数组a[]进行加和(i的阶乘加上之前的阶乘和a[])。

2.P4924 [1007] 魔法少女小Scarlet

        i.题目

        ii.代码

#include <iostream>  
#include <string>
using namespace std;int temp[500][500], square[500][500];//顺时针转换
void turn(int x, int y, int r)
{//首先,将原矩阵copy一份,方便后续的移动赋值,起到temp的作用for (int i = x - r; i <= x + r; i++){for (int j = y - r; j <= y + r; j++) temp[i][j] = square[i][j];}//顺时针则从最左下角开始(其实,从哪个角都可以),每次移动只看这一列的移动,因为循环是按行遍历,在转动的时候,列会变成行,用行遍历,按列赋值//这里要对应行的从左到右,所以并不是哪个角都便利int x1 = x + r, y1 = y - r;for (int i = x - r; i <= x + r; i++){for (int j = y - r; j <= y + r; j++){square[i][j] = temp[x1][y1];//从下往上,转动之后就是从左到右x1--;}//之后,循环的遍历进入下一行,我们自己标记的列,也要进入下一列(同时回到最下面一行)x1 = x + r, y1++;}
}
//逆时针转换(与顺时针的转动道理不能说是一摸一样吧,只能说是完全相同)
void turn_(int x, int y, int r)
{for (int i = x - r; i <= x + r; i++){for (int j = y - r; j <= y + r; j++) temp[i][j] = square[i][j];}int x1 = x - r, y1 = y + r;for (int i = x - r; i <= x + r; i++){for (int j = y - r; j <= y + r; j++){square[i][j] = temp[x1][y1];x1++;}x1 = x - r, y1--;}
}void testlan()
{//用t 暂存需要存入的数,之后只需递增即可存入下一位int n, m, t = 1;cin >> n >> m;//建立原始矩阵for (int i = 1; i <= n; i++){for (int j = 1; j <= n; j++){square[i][j] = t;t++;}}验证输出//for (int i = 1; i <= n; i++)//{//	for (int j = 1; j <= n; j++)//	{//		cout << square[i][j] << ' ';//	}//	cout << endl;//}//cout << "--------------" << endl;//输入指令,同时进行转动处理(因为指令之间顺序不能颠倒且再加一个数组用来储存过于多此一举)int x, y, r, z;for (int i = 1; i <= m; i++){cin >> x >> y >> r >> z;if (z == 0) turn(x, y, r);else if (z == 1) turn_(x, y, r);}//输出for (int i = 1; i <= n; i++){for (int j = 1; j <= n; j++){cout << square[i][j] << ' ';}cout << endl;}
}int main()
{testlan();return 0;
}

        之后,总结一下,,这个题目给我带来的新知识。

3.二维数组

        i.二维数组的建立

        通过一个嵌套循环,按先从左到右后从上到下的顺序建立二维数组。 

for (int i = x - r; i <= x + r; i++)
{for (int j = y - r; j <= y + r; j++) {//进行赋值之类的操作}
}

        ii.备份

        对于数组内部分位置的数据,进行一定的位置变动,可以使用temp[][]对原数组进行备份暂存,之后,再进行值的移动(其思路与两变量值的交换同理,temp = a; a = b; b = temp )。

        iii.二维数组的转动

        需要进行备份,因为有大量的数据在位置上出现移动。

        每次转动只看一列,列转动后就会变为行,可以设置两个指针,指示行列下标,指针在temp中遍历列,将值赋值给行遍历原数组中。

//顺时针转换
void turn(int x, int y, int r)
{//首先,将原矩阵copy一份,方便后续的移动赋值,起到temp的作用for (int i = x - r; i <= x + r; i++){for (int j = y - r; j <= y + r; j++) temp[i][j] = square[i][j];}//顺时针则从最左下角开始(其实,从哪个角都可以),每次移动只看这一列的移动,因为循环是按行遍历,在转动的时候,列会变成行,用行遍历,按列赋值//这里要对应行的从左到右,所以并不是哪个角都便利int x1 = x + r, y1 = y - r;for (int i = x - r; i <= x + r; i++){for (int j = y - r; j <= y + r; j++){square[i][j] = temp[x1][y1];//从下往上,转动之后就是从左到右x1--;}//之后,循环的遍历进入下一行,我们自己标记的列,也要进入下一列(同时回到最下面一行)x1 = x + r, y1++;}
}

4.指令的及时处理

        当对一个数组或变量,给出大量的操作指令时,可以在一个指令的输入后,直接进行操作,而不必拿一个数组存储指令,等指令都输入完了,再读取数组,进行指令操作。(僵化思维了)

相关文章:

蓝桥杯-洛谷刷题-day4(C++)

目录 1.高精度乘法 i.P1303 A*B Problem高精度乘法 2.P4924 [1007] 魔法少女小Scarlet i.题目 ii.代码 3.二维数组 i.二维数组的建立 ii.备份 iii.二维数组的转动 4.指令的及时处理 1.高精度乘法 即&#xff0c;将每一位变为数组中的一位&#xff0c;并在数组中以倒序排列&a…...

c++总复习

1. C 中的移动语义及其作用 定义 移动语义是 C 11 引入的一种重要特性&#xff0c;它用于优化对象的资源管理&#xff0c;特别是在涉及对象所有权转移的场景中。传统的 C 语义在对象赋值或传递给函数时&#xff0c;通常会进行拷贝操作&#xff0c;即创建源对象的一个完整副本&…...

设计模式之策略模式-工作实战总结与实现

文章目录 应用场景存在问题解决方案继续延伸 应用场景 假设有这样的业务场景&#xff0c;大数据系统把文件推送过来&#xff0c;根据不同类型采取不同的解析方式。多数的小伙伴就会写出以下的代码&#xff1a; public class Question {public static void main(String[] args…...

E - 11/22 Subsequence题解

文章目录 大致思路代码 大致思路 预处理: 用pos1, pos2, posls 分别记录 1 1 1, 2 2 2 , / / / 在字符串中的『位置』 用cum1 和 cum2 分别存储了 1 1 1 和 2 2 2 的前缀和&#xff0c;这样可以快速获取任意区间内的 1 1 1 和 2 2 2 的『数量』 查询处理: 对于每个查询…...

PyPI 攻击:ChatGPT、Claude 模仿者通过 Python 库传播 JarkaStealer

《Java代码审计》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484219&idx1&sn73564e316a4c9794019f15dd6b3ba9f6&chksmc0e47a67f793f371e9f6a4fbc06e7929cb1480b7320fae34c32563307df3a28aca49d1a4addd&scene21#wechat_redirect 《Web安全》h…...

单片机学习笔记 9. 8×8LED点阵屏

更多单片机学习笔记&#xff1a;单片机学习笔记 1. 点亮一个LED灯单片机学习笔记 2. LED灯闪烁单片机学习笔记 3. LED灯流水灯单片机学习笔记 4. 蜂鸣器滴~滴~滴~单片机学习笔记 5. 数码管静态显示单片机学习笔记 6. 数码管动态显示单片机学习笔记 7. 独立键盘单片机学习笔记 8…...

【大模型-智能体】AutoGen Studio测试和导出工作流程

1. 测试工作流程 AutoGen Studio允许用户针对任务交互式地测试工作流程&#xff0c;并审查由此产生的成果物&#xff08;如图像、代码和文档&#xff09;。此外用户还可以查看Agent工作流程在处理任务时的“内心独白”&#xff0c;并查看诸如运行成本&#xff08;如回合数、令牌…...

【Linux】-学习笔记04

第十二章、磁盘管理 1.查看磁盘空间使用量 1.1df命令 作用&#xff1a; 列出文件系统的磁盘空间占用情况 df&#xff0c;disk free&#xff0c;通过文件系统来快速获取空间大小的信息&#xff0c;当我们删除一个文件的时候&#xff0c;这个文件 不是马上就在文件系统当中消…...

计算机网络:应用层知识点概述及习题

网课资源&#xff1a; 湖科大教书匠 1、概述 习题1 1 在计算机网络体系结构中&#xff0c;应用层的主要功能是 A. 实现进程之间基于网络的通信 B. 通过进程之间的交互来实现特定网络应用 C. 实现分组在多个网络上传输 D. 透明传输比特流 2 以下不属于TCP/IP体系结构应用层范畴…...

如何构建高效的接口自动化测试框架?

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 在选择接口测试自动化框架时&#xff0c;需要根据团队的技术栈和项目需求来综合考虑。对于测试团队来说&#xff0c;使用Python相关的测试框架更为便捷。无论选…...

【C++习题】10.反转字符串中的单词 lll

题目&#xff1a; 链接&#x1f517;&#xff1a;557.反转字符串中的单词 lll 题目&#xff1a; 代码&#xff1a; class Solution { public:void Reverse(string &s, int start, int end){char tmp;while(start < end){tmp s[start];s[start] s[end];s[end] tmp;…...

undefined symbol: __nvJitLinkComplete_12_4, version libnvJitLink.so.12 问题解决

​ 在部署运行opencompass项目时遇到了如下报错&#xff1a; ImportError: /data/conda/envs/opencompass/lib/python3.10/site-packages/torch/lib/../../nvidia/cusparse/lib/libcusparse.so.12: undefined symbol: __nvJitLinkComplete_12_4, version libnvJitLink.so.12​…...

C语言——数组逐元素操作练习

定义一个能容纳10个元素的整形数组a&#xff0c;从键盘读取9个整数存放到前9个数组元素中。 一. 从键盘读取一个整数n和位置p(0<p<8)&#xff0c;插入n到数组a中&#xff0c;插入位置&#xff1a;下标p。要求插入点及后续的数组元素都要后移动。 代码如下&#xff1a; …...

HTML的自动定义倒计时,这个配色存一下

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>自定义倒计时</title><style>* {mar…...

CUDA补充笔记

文章目录 一、不同核函数前缀二、指定kernel要执行的线程数量三、线程需要两个内置坐标变量来唯一标识线程四、不是blocksize越大越好&#xff0c;上限一般是1024个blocksize 一、不同核函数前缀 二、指定kernel要执行的线程数量 总共需要线程数是&#xff1a; 1 * N N个线程…...

C++二级:满足条件的数的累加

现有n个整数&#xff0c;将其中个位数为k的数进行累加求和。 输入 第一行1个整数n。&#xff08; 0 < n < 1000&#xff09; 第二行n个非负整数&#xff0c;以空格分隔&#xff0c;每个数不大于100000。 第三行1个整数k。(0 ≤ k ≤ 9) 输出 输出满足题目要求的累加和。…...

【山大909算法题】2014-T1

文章目录 1.原题2.算法思想3.关键代码4.完整代码5.运行结果 1.原题 为带表头的单链表类Chain编写一个成员函数Reverse&#xff0c;该函数对链表进行逆序操作&#xff08;将链表中的结点按与原序相反的顺序连接&#xff09;&#xff0c;要求逆序操作就地进行&#xff0c;不分配…...

【MySQL实战45讲笔记】基础篇——深入浅出索引(上)

系列文章 基础篇——MySQL 的基础架构 基础篇——redo log 和 binlog 基础篇——事务隔离 目录 系列文章深入浅出索引&#xff08;上&#xff09;4.1 索引的常见模型4.2 InnoDB 的索引模型4.3 索引维护4.4 思考&#xff1a;为什么要重建索引以及如何做&#xff1f; 深入浅出索…...

通关C语言自定义类型:联合和枚举

C语言的自定义类型有四个分别是&#xff1a;数组&#xff1b;结构体&#xff08;struct&#xff09;&#xff1b;联合体&#xff08;union&#xff09;&#xff1b;枚举&#xff08;enum&#xff09;。前面已经讨论过数组和结构体&#xff0c;这期让我们来学习一下联合体和枚举…...

python高阶技巧一

闭包 简单认识一下闭包 以下代码&#xff0c;内层inner函数不仅依赖于自身的参数b&#xff0c;还依赖于外层outer函数的参数a。inner就是一个闭包函数&#xff0c;既能访问外部变量&#xff0c;又保证外部变量不是全局的&#xff0c;不会被篡改掉&#xff0c;确保了外部变量的…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...

Kafka主题运维全指南:从基础配置到故障处理

#作者&#xff1a;张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1&#xff1a;主题删除失败。常见错误2&#xff1a;__consumer_offsets占用太多的磁盘。 主题日常管理 …...

6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础

第三周 Day 3 &#x1f3af; 今日目标 理解类&#xff08;class&#xff09;和对象&#xff08;object&#xff09;的关系学会定义类的属性、方法和构造函数&#xff08;init&#xff09;掌握对象的创建与使用初识封装、继承和多态的基本概念&#xff08;预告&#xff09; &a…...

yaml读取写入常见错误 (‘cannot represent an object‘, 117)

错误一&#xff1a;yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因&#xff0c;后面把yaml.safe_dump直接替换成yaml.dump&#xff0c;确实能保存&#xff0c;但出现乱码&#xff1a; 放弃yaml.dump&#xff0c;又切…...