螺旋矩阵、旋转矩阵、矩阵Z字打印

螺旋矩阵

在这里插入图片描述

#include <iostream>
#include <vector>
void display(std::vector<std::vector<int>>&nums){for(int i = 0; i < nums.size(); ++i){for(int j = 0; j < nums[0].size(); ++j){std::cout<<nums[i][j]<<' ';}std::cout<<std::endl;}
}
void Process(int x1, int y1, int x2, int y2, std::vector<std::vector<int>>&nums){if(x1 == x2){while (y1 <= y2){std::cout<<nums[x1][y1++]<<' ';}    } else if(y1 == y2){while (x1 <= x2){std::cout<<nums[x1++][y1]<<' ';}    }else{for(int i = y1; i <= y2; ++i){std::cout<<nums[x1][i]<<' ';}for(int i = x1 + 1; i <= x2; ++i){std::cout<<nums[i][y2]<<' ';}for(int i = y2 - 1; i >= y1; --i){std::cout<<nums[x2][i]<<' ';}for(int i = x2 - 1; i > x1; --i){std::cout<<nums[i][y1]<<' ';}}
}
int main(){std::vector<std::vector<int>>nums;int n = 6;int m = 6;nums.resize(n);int num = 1;for(int i = 0; i < n;  ++i){std::vector<int>tmp(m, 0);for(int j = 0; j < m; ++j){tmp[j] = num++;}nums[i] = tmp;}display(nums);// 矩阵类型的题目可以枚举一些特殊的点来做左上角点和右下角点, 然后在往内部收缩int x1 = 0, y1 = 0, x2 = n-1, y2 = m-1;while (x1 <= x2){Process(x1, y1, x2, y2, nums);++x1;++y1;--x2;--y2;}std::getchar();}

旋转矩阵

类似于这个螺旋矩阵我们也是在每次处理最外层的矩形,然后往内收缩。
对于一个矩形我们选取四个点依次进行交换即可

#include <iostream>
#include <vector>
void display(std::vector<std::vector<int>>&nums){for(int i = 0; i < nums.size(); ++i){for(int j = 0; j < nums[0].size(); ++j){std::cout<<nums[i][j]<<' ';}std::cout<<std::endl;}
}
void Process(int x1, int y1, int x2, int y2, std::vector<std::vector<int>>&nums){if(x1 == x2){while (y1 <= y2){std::cout<<nums[x1][y1++]<<' ';}    } else if(y1 == y2){while (x1 <= x2){std::cout<<nums[x1++][y1]<<' ';}    }else{for(int i = y1; i <= y2; ++i){std::cout<<nums[x1][i]<<' ';}for(int i = x1 + 1; i <= x2; ++i){std::cout<<nums[i][y2]<<' ';}for(int i = y2 - 1; i >= y1; --i){std::cout<<nums[x2][i]<<' ';}for(int i = x2 - 1; i > x1; --i){std::cout<<nums[i][y1]<<' ';}}
}
int main(){std::vector<std::vector<int>>nums;int n = 4;int m = 4;nums.resize(n);int num = 1;for(int i = 0; i < n;  ++i){std::vector<int>tmp(m, 0);for(int j = 0; j < m; ++j){tmp[j] = num++;}nums[i] = tmp;}display(nums);// 枚举矩阵的四个点把最外圈的给调整好再往内圈收缩int x1, y1, x2, y2, x3, y3, x4, y4;int count = 0;while(count < n -2){x1 = count, y1 = count;x2 = count, y2 = n - 1 - count;x3 = n - 1 - count, y3 = count;x4 = n - 1 - count, y4 = n - 1 - count;while(y1 < y2 && x2 < x4 && y4 > y3 && x3 > x1){std::swap(nums[x1][y1], nums[x2][y2]);std::swap(nums[x1][y1], nums[x4][y4]);std::swap(nums[x1][y1], nums[x3][y3]);++y1;++x2;--y4;--x3;}++count;}display(nums);std::getchar();}

矩阵Z字打印

也是和螺旋矩阵类似选取两个点进行循环

#include <iostream>
#include <vector>
void display(int x1, int y1, int x2, int y2, std::vector<std::string>&strs){if(x1 < x2){while ( x1 <= x2 ){std::cout<<strs[x1++][y1--]<<' ';}std::cout<<std::endl;      } else{while ( x1 >= x2  ){std::cout<<strs[x1--][y1++]<<' ';}std::cout<<std::endl;          }
}
int main(){std::vector<std::string>strs = {"abcd", "efgh", "jklh"};int n = strs.size();int m = strs[0].size();int x1 = 0, y1 = 0;int x2 = 0, y2 = 0;int num = 0;while(x1 < n){if(num % 2 == 0){display(x1, y1, x2, y2, strs);} else{display(x2, y2, x1, y1, strs);}if(y1 < m - 1){y1++;}else{x1++;}if(x2 < n - 1){x2++;}else{y2++;}num++;} std::getchar();}

矩阵打印的题目可以从选取若干个点然后处理一层之后再往内进行收缩的做法先进行考虑

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

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

相关文章

从钉钉到金蝶云星空通过接口配置打通数据

从钉钉到金蝶云星空通过接口配置打通数据 对接系统钉钉 钉钉&#xff08;DingTalk&#xff09;是阿里巴巴集团打造的企业级智能移动办公平台&#xff0c;是数字经济时代的企业组织协同办公和应用开发平台。钉钉将IM即时沟通、钉钉文档、钉闪会、钉盘、Teambition、OA审批、智能…

算法通过村第五关-队列和Hash青铜笔记|队列和Hash

文章目录 前言1. Hash基础1.1 Hash的概念和基本特征1.2 碰撞处理方法1.2.1 开放地址法1.1.2 链地址法 2. 队列的基础2.1 队列的概念和基本特征2.2 队列的实现 总结 前言 提示&#xff1a;幸福的秘密是尽量扩大自己的兴趣范围对感兴趣的人和物尽可能的友善 --波特兰罗素 谈完栈&…

说说Omega架构

分析&回答 Omega架构我们暂且称之为混合数仓。 什么是ECS设计模式 在谈我们的解法的时候&#xff0c;必须要先提ECS的设计模式。 简单的说&#xff0c;Entity、Component、System分别代表了三类模型。 实体(Entity)&#xff1a;实体是一个普通的对象。通常&#xff0c…

在window上安装hadoop3.3.4

暑假不知道啥原因电脑死机啦。环境需要重新配一下 首先需要配置Hadoop集群&#xff0c;但是为了代码调试方便需要先在Windows上配置Hadoop环境。 1.前期准备 首先在搭建Hadoop环境之前需要先安装JDK&#xff0c;并且配置好Java环境变量。 这里有个bug就是Java环境变量中不允许…

视频动态壁纸 Dynamic Wallpaper for Mac中文

Dynamic Wallpaper是一款Mac平台上的动态壁纸应用程序&#xff0c;它可以根据时间等因素动态切换壁纸&#xff0c;提供更加生动和多样化的桌面体验。 Dynamic Wallpaper包含了多个动态壁纸&#xff0c;用户可以根据自己的喜好选择和切换。这些动态壁纸可以根据时间等因素进行自…

【Android Framework系列】第13章 SVG矢量图形自定义组件(绘制中国地图)

1 前言 本章节我们来了解下什么是SVG矢量图形&#xff0c;怎么通过SVG实现图形的绘制&#xff0c;通过SVG实现不规则的自定义控件&#xff0c;项目实现一个中国地图&#xff0c;实现每个省都能够点击&#xff0c;项目地址在文末请自取。 2 SVG概念 2.1 SVG矢量图形 SVG 指可…

二叉树的构建及遍历

目录 题目题目要求示例 解答方法一、实现思路时间复杂度和空间复杂度代码 方法二、实现思路时间复杂度和空间复杂度代码 题目 二叉树的构建及遍历 题目要求 题目链接 示例 解答 方法一、 先构建二叉树&#xff0c;再中序遍历。 实现思路 按照给出的字符串创建二叉树&am…

分布式定时任务框架选型,讲的太好了

1. 前言 我们先思考下面几个业务场景的解决方案: 支付系统每天凌晨1点跑批&#xff0c;进行一天清算&#xff0c;每月1号进行上个月清算电商整点抢购&#xff0c;商品价格8点整开始优惠12306购票系统&#xff0c;超过30分钟没有成功支付订单的&#xff0c;进行回收处理商品成…

.netcore grpc截止时间和取消详解

一、截止时间概述 截止时间功能让 gRPC 客户端可以指定等待调用完成的时间。 超过截止时间时&#xff0c;将取消调用。 设定一个截止时间非常重要&#xff0c;因为它将提供调用可运行的最长时间。它能阻止异常运行的服务持续运行并耗尽服务器资源。截止时间对于构建可靠应用非…

【Git】(六)子模块跟随主仓库切换分支

场景 主仓库&#xff1a;TestGit 子模块&#xff1a;SubModule 分支v1.0 .gitmodules文件 [submodule "Library/SubModule"]path Library/SubModuleurl gitgitee.com:sunriver2000/SubModule.gitbranch 1.0.0.0 分支v2.0 .gitmodules文件 [submodule "Li…

用Socket实现网络通信

文章目录 背景网络编程网络编程三要素 2.DatagramSocket之UDP通信程序2.1 UDP发送数据2.2UDP接收数据2.3 3. Socket之TCP通信程序3.1TCP发送数据3.2TCP接收数据 背景 网络编程 ● 计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备&#xff0c;通过通信线…

IP网络广播系统有哪些优点

IP网络广播系统有哪些优点 IP网络广播系统有哪些优点&#xff1f; IP网络广播系统是基于 TCP/IP 协议的公共广播系统&#xff0c;采用 IP 局域网或 广域网作为数据传输平台&#xff0c;扩展了公共广播系统的应用范围。随着局域网络和 网络的发展 , 使网络广播的普及变为可能 …

《Flink学习笔记》——第十一章 Flink Table API和 Flink SQL

Table API和SQL是最上层的API&#xff0c;在Flink中这两种API被集成在一起&#xff0c;SQL执行的对象也是Flink中的表&#xff08;Table&#xff09;&#xff0c;所以我们一般会认为它们是一体的。Flink是批流统一的处理框架&#xff0c;无论是批处理&#xff08;DataSet API&a…

北京已收录2023开学了《乡村振兴战略下传统村落文化旅游设计》中国建筑出版传媒许少辉八一新书

北京已收录2023开学了《乡村振兴战略下传统村落文化旅游设计》中国建筑出版传媒许少辉八一新书

RDMA QP数量和RDMA性能

QP数量上升性能下降 ​​​​​​https://icnp21.cs.ucr.edu/papers/icnp21camera-paper30.pdf 在现代云数据中心中&#xff0c;大规模分布式应用通常构建在许多机器上&#xff0c;需要使用大量并发连接进行频繁的网络通信[4]–[6]。但是&#xff0c;RDMA的性能会随着连接数的…

自动化运维工具-----Ansible入门详解

目录 一.Ansible简介 什么是Ansible&#xff1f; Ansible的特点 Ansible的架构 二.Ansible任务执行解析 ansible任务执行模式 ansible执行流程 ansible命令执行过程 三.Ansible配置解析 ansible的安装方式 ansible的程序结构&#xff08;yum安装为例&#xff09; ansibl…

信息安全-应用安全-蚂蚁集团软件供应链安全实践

8月10日&#xff0c;由悬镜安全主办、以“开源的力量”为主题的DSS 2023数字供应链安全大会在北京国家会议中心隆重召开。蚂蚁集团网络安全副总经理程岩出席并发表了《蚂蚁集团软件供应链安全实践》主题演讲。 图1 蚂蚁集团网络安全副总经理程岩发表主题演讲 以下为演讲实录&am…

阿里云 MSE 助力开迈斯实现业务高增长背后带来的服务挑战

开迈斯新能源科技有限公司于 2019 年 5 月 16 日成立&#xff0c;目前合资股东分别为大众汽车&#xff08;中国&#xff09;投资有限公司、中国第一汽车股份有限公司、一汽-大众汽车有限公司[增资扩股将在取得适当监督&#xff08;包括反垄断&#xff09;审批后完成]、万帮数字…

显示本地 IP 地址和相应的 QR 码,方便用户共享和访问网络信息

这段代码使用了 wxPython、socket、qrcode 和 PIL&#xff08;Python Imaging Library&#xff09;模块来生成一个具有本地 IP 地址和相应 QR 码的窗口应用程序。 C:\pythoncode\new\showipgenqrcode.py 让我们逐行解释代码的功能&#xff1a; import wx&#xff1a;导入 wx…

jdbc235

概念&#xff1a;java database connectivity java数据库连接 java语言操作数据库 定义了一套操作所有关系型数据库的规则&#xff08;接口&#xff09; 本质&#xff1a;其实是官方公司定义了一套操作所有关系型数据库的规则&#xff0c;即接口。各个数据库厂商去实现这套接…