蓝桥杯-洛谷刷题-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.高精度乘法 即,将每一位变为数组中的一位,并在数组中以倒序排列&a…...
c++总复习
1. C 中的移动语义及其作用 定义 移动语义是 C 11 引入的一种重要特性,它用于优化对象的资源管理,特别是在涉及对象所有权转移的场景中。传统的 C 语义在对象赋值或传递给函数时,通常会进行拷贝操作,即创建源对象的一个完整副本&…...
设计模式之策略模式-工作实战总结与实现
文章目录 应用场景存在问题解决方案继续延伸 应用场景 假设有这样的业务场景,大数据系统把文件推送过来,根据不同类型采取不同的解析方式。多数的小伙伴就会写出以下的代码: 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 的前缀和,这样可以快速获取任意区间内的 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点阵屏
更多单片机学习笔记:单片机学习笔记 1. 点亮一个LED灯单片机学习笔记 2. LED灯闪烁单片机学习笔记 3. LED灯流水灯单片机学习笔记 4. 蜂鸣器滴~滴~滴~单片机学习笔记 5. 数码管静态显示单片机学习笔记 6. 数码管动态显示单片机学习笔记 7. 独立键盘单片机学习笔记 8…...

【大模型-智能体】AutoGen Studio测试和导出工作流程
1. 测试工作流程 AutoGen Studio允许用户针对任务交互式地测试工作流程,并审查由此产生的成果物(如图像、代码和文档)。此外用户还可以查看Agent工作流程在处理任务时的“内心独白”,并查看诸如运行成本(如回合数、令牌…...

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

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

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

【C++习题】10.反转字符串中的单词 lll
题目: 链接🔗:557.反转字符串中的单词 lll 题目: 代码: 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项目时遇到了如下报错: 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,从键盘读取9个整数存放到前9个数组元素中。 一. 从键盘读取一个整数n和位置p(0<p<8),插入n到数组a中,插入位置:下标p。要求插入点及后续的数组元素都要后移动。 代码如下: …...

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越大越好,上限一般是1024个blocksize 一、不同核函数前缀 二、指定kernel要执行的线程数量 总共需要线程数是: 1 * N N个线程…...
C++二级:满足条件的数的累加
现有n个整数,将其中个位数为k的数进行累加求和。 输入 第一行1个整数n。( 0 < n < 1000) 第二行n个非负整数,以空格分隔,每个数不大于100000。 第三行1个整数k。(0 ≤ k ≤ 9) 输出 输出满足题目要求的累加和。…...

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

【MySQL实战45讲笔记】基础篇——深入浅出索引(上)
系列文章 基础篇——MySQL 的基础架构 基础篇——redo log 和 binlog 基础篇——事务隔离 目录 系列文章深入浅出索引(上)4.1 索引的常见模型4.2 InnoDB 的索引模型4.3 索引维护4.4 思考:为什么要重建索引以及如何做? 深入浅出索…...

通关C语言自定义类型:联合和枚举
C语言的自定义类型有四个分别是:数组;结构体(struct);联合体(union);枚举(enum)。前面已经讨论过数组和结构体,这期让我们来学习一下联合体和枚举…...

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

7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...

376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
Python 高效图像帧提取与视频编码:实战指南
Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...
前端高频面试题2:浏览器/计算机网络
本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…...

2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版
1.题目描述 2.思路 当前的元素可以重复使用。 (1)确定回溯算法函数的参数和返回值(一般是void类型) (2)因为是用递归实现的,所以我们要确定终止条件 (3)单层搜索逻辑 二…...