算法05 模拟算法之二维数组相关内容详解【C++实现】

大家好,我是bigbigli,前面一节我们一节讲过一维数组的模拟了,如果还没看的话,可以👉点击此处。模拟算法还有很多内容需要讲,比如图像、日期相关的模拟算法,后续将继续更新,今天先来讲一下普通的二维数组相关模拟题目。

目录

训练:外围元素之和

解析

参考代码

训练:稀疏矩阵

解析

参考代码

训练:矩阵检测

解析

参考代码


训练:外围元素之和

给定一个m行n列的矩阵,求矩阵外围元素之和。所谓矩阵外围的元素,是矩阵第一行、最后一行、第一列和最后一列的所有元素。

【输入描述】第1行:为两个整数,分别表示矩阵的行数m和列数n,中间以一个空格间隔;

接下来m行为该矩阵m行n列的元素,且都为整数,每一行元素之间以一个空格隔开。

【输出描述】一个整数,表示该矩阵外围元素之和。

【样例输入】

3 4
1 2 2 1
5 6 7 8
9 3 0 5

【样例输出】

36

解析

外围元素需要把两行两列的元素全部加起来就行,需要在二维数组的中查找到满足行是第一行或者最后一行的,以及列是第一列的和最后一列的元素,求和即可。要注意的是不可以单独求出两行和两列分别的四个行列和,然后再相加,那样会有重复元素。

 

参考代码

#include<iostream>
using namespace std;
int a[110][110];
int main(){int m,n,sum=0;cin>>m>>n;for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){cin>>a[i][j];//输入元素后即可判断if(i==1 || i==m || j==1 || j==n)sum+=a[i][j];//满足任一条件求和   }}cout<<sum;return 0;   
}

训练:稀疏矩阵

大部分元素是0的矩阵称为稀疏矩阵,假设有n个非0元素,则可把稀疏矩阵用n*3的矩阵简记之,其中第一列是行号,第二列是列号,第三列是该行、该列下的非0元素的值。

如:

0  0  0  3

0  2  0  0

0  5  0  0

简记成:

1  4  3        //第1行第4列有个数是3

2  2  2        //第2行第2列有个数是2

3  2  5        //第3行第2列有个数是5

试编程读入一稀疏矩阵,转换成简记形式,并输出。

【输入描述】第1行,两个整数,为原始矩阵的行数a和列数b;

之后的a行为a行b列的矩阵

【输出描述】输出为化为简记形式之后的矩阵(行数不确定,列数为3)。

【样例输入】

3 4
0 0 0 3        
0 2 0 0                         
0 5 0 0

【样例输出】

1 4 3
2 2 2
3 2 5

解析

要对原数组中非0元素的位置和元素值进行记录,可以记在另一个二维数组里面,行数不确定,列数为3列。

即在循环中实现

b[t][1] = i

b[t][2] = j

b[t][3] = a[i][j]

 

参考代码

#include<iostream>
using namespace std;
int a[110][110], b[10010][4];
int main()
{int m,n,t=1;cin>>m>>n;for(int i=1;i<=m;i++)for(int j=1;j<=n;j++){cin>>a[i][j];if(a[i][j]!=0){b[t][1]=i;  //把非0元素的行号保存到新数组第一列b[t][2]=j;  //把列号存在新数组第二列b[t++][3]=a[i][j];  //元素值存在新数组第三列,且新数组行号加1}}for(int i=1;i<t;i++)cout<<b[i][1]<<" "<<b[i][2]<<" "<<b[i][3]<<endl;    //按顺序输出新数组每一行的第一、二、三列return 0;
}

训练:矩阵检测

给定n*n由0和1组成的矩阵,如果矩阵的每一行和每一列的1的数量都是偶数,则认为符合条件。

你的任务就是检测矩阵是否符合条件,或者在仅改变一个矩阵元素的情况下能否符合条件。

"改变矩阵元素"的操作定义为0变成1或者1变成0。

【输入描述】第1行,一个整数n,表示矩阵的行列数

之后的n行为n行n列的矩阵

【输出描述】如果矩阵符合条件,则输出"yes!";

如果矩阵仅改变一个矩阵元素就能符合条件,则输出需要改变的元

素所在的行号和列号,以一个空格分开。如果不符合以上两条,输出“no!”。

【样例输入】

4

1 0 1 0

0 0 1 0

1 1 1 1

0 1 0 1

【样例输出】2 3

 

解析

寻找每一行中1的数量,如果这个数量是奇数的话就记录一下,并且把最后一行1的数量为奇数的行号记录下来。同样的对于列也执行这个操作。如果1的数量为奇数的行数或者列数超过1,就无法满足;一个都没有就直接满足条件;剩下的就是改变一个元素,找到那个不满足的行号和列号进行更改即可。

 

参考代码

#include<iostream>
using namespace std;
int main()
{int m,t[15][15],h,l,hs=0,ls=0,a=0,b=0;cin>>m;for(int i=1;i<=m;i++)for(int j=1;j<=m;j++)cin>>t[i][j];for(int i=1;i<=m;i++){a=0;//每行找1,到下一行清零for(int j=1;j<=m;j++)if(t[i][j]==1)a++;if(a%2==1){//如果1的数量是奇数hs++;//行数量增加h=i;//保存行下标}}for(int i=1;i<=m;i++){b=0;//每列找1,到下一列清零for(int j=1;j<=m;j++)if(t[j][i]==1)//按列查找元素b++;if(b%2==1){ls++;//列数量增加l=i;//保存列下标}}if(ls>1||hs>1)//行数或者列数超过1就不满足    cout<<"no!";else if(hs==0&&ls==0)  //都没有就满足cout<<"yes!";else  //剩下的就是需要修改保存的行下标和列下标位置元素cout<<h<<" "<<l;return 0;
}

从入门到算法,再到数据结构,查看全部文章请点击此处icon-default.png?t=N7T8http://www.bigbigli.com/

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

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

相关文章

代码随想录——跳跃游戏Ⅱ(Leetcode 45)

题目链接 贪心 class Solution {public int jump(int[] nums) {if(nums.length 1){return 0;}int count 0;// 当前覆盖最远距离下标int curDistance 0;// 下一步覆盖距离最远下标int nextDistance 0;for(int i 0; i < nums.length; i){nextDistance Math.max(nums[…

前端面试题(九)答案版

姓名&#xff1a; 面试时间&#xff1a; 面试岗位&#xff1a; 1、SEO优化&#xff1f; SEO(Search Engine Optimization)即搜索引擎优化,是一种提高网站在搜索引擎中排名的技术。主要包括: - 网站内容优化:提高网页内容质量,关键词优化等 -…

快速修复mfc100u.dll丢失解决方案

相连文章&#xff1a;SecureCRT的安装破解 [详细过程2024] 有小伙伴向我反馈在打开SecureFX注册机之后显示【mfc100u.dll找不到】重装之后也没有用&#xff0c;这个是因为Microsoft Visual C的运行时组件和库出现了错误&#xff0c;直接选择重新安装就可以 出现这种情况的原因…

解析Java微服务架构:从零构建高性能系统

解析Java微服务架构&#xff1a;从零构建高性能系统 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;我将为大家解析Java微服务架构&#xff0c…

等保测评:网络安全的重要屏障及其等级划分

在信息化高速发展的今天&#xff0c;网络安全已成为国家、企业乃至个人不容忽视的重要议题。其中&#xff0c;等保测评作为网络安全等级保护工作的重要环节&#xff0c;其意义愈发凸显。本文将详细解读等保测评的含义&#xff0c;并深入探讨其等级划分。 一、等保测评概述 等…

高性能并行计算华为云实验五:PageRank算法实验

目录 一、实验目的 二、实验说明 三、实验过程 3.1 创建PageRank源码 3.2 makefile的创建和编译 3.3 主机配置文件建立与运行监测 四、实验结果与分析 4.1 采用默认的节点数量及迭代次数进行测试 4.2 分析并行化下节点数量与耗时的变化规律 4.3 分析迭代次数与耗时的变…

MySQL——联表查询JoinON详解

Join 对比&#xff08;7种&#xff09; 代码演示&#xff1a; -- 查询参加了考试的同学&#xff08;学号&#xff0c;姓名&#xff0c;科目编号&#xff0c;分数&#xff09; SELECT * FROM student SELECT * FROM result/* 1. 分析需求&#xff1a;分析查询的字段来自哪些表&…

【C++学习】适合新手小白的C++的小型项目

对于学习C&#xff0c;以下是一些适合的小项目建议&#xff0c;这些项目可以帮助你熟悉C的基础语法、面向对象编程、文件操作、标准库等概念&#xff1a; 控制台计算器&#xff1a; 创建一个简单的控制台应用程序&#xff0c;实现一个计算器&#xff0c;能够执行基本的算术运算…

spring原理篇

第三方bean默认为方法名 自动配置 自动配置的原理 springboot的自动配置原理 首先是从 SpringBootApplication这个注解出发 有一个ComponentScan()默认扫描同级包及其子包 第二个注解是springbootconfiguration 声明当前类是一个配置类 第三个是核心 enableAutoConfigurati…

通过看板系统管理工作流程:强调持续交付与可视化工作的全面指南

目录 前言1. 看板系统简介1.1 看板系统的基本原理1.2 看板系统的主要特点 2. 强调持续交付的重要性2.1 持续交付的优势2.2 持续交付的实施步骤 3. 可视化工作的核心价值3.1 提高透明度和可见性3.2 促进工作流程的优化3.3 增强团队的自我管理能力 4. 看板系统的实施指南4.1 初始…

速盾:cdn使用场景是什么?

CDN&#xff0c;全称为Content Delivery Network&#xff0c;即内容分发网络。它是一种通过在全球各地部署服务器、缓存内容以及优化网络路由等方式&#xff0c;提供高速、高可用、安全稳定的内容分发服务的网络架构。 在互联网的发展过程中&#xff0c;由于网络的带宽和延迟等…

vue-cli 搭建项目,ElementUI的搭建和使用

vue-cli 官方提供的一个脚手架&#xff0c;用于快速生成一个vue的项目模板&#xff1b;预先定义 好的目录结构及基础代码&#xff0c;就好比咱们在创建Maven项目时可以选择创建一个 骨架项目&#xff0c;这个骨架项目就是脚手架&#xff0c;我们的开发更加的快速&#xff1b; …

在FlowUs息流,让知识库为你所用|如何打造个人知识库|如何打造企业知识库

&#x1f389; 在 FlowUs 的世界中&#xff0c;知识绽放出无限的可能&#xff01;&#x1f680; 在当今信息爆炸的时代&#xff0c;知识的更新换代速度极快&#xff0c;我们每天都面临着海量的信息冲击。拥有一个属于自己的知识库变得至关重要。 首先&#xff0c;打造自己的知…

【PB案例学习笔记】-24创建一个窗口图形菜单

写在前面 这是PB案例学习笔记系列文章的第24篇&#xff0c;该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习&#xff0c;提高编程技巧&#xff0c;以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码&#xff0c;小凡都上传到了gite…

Django 表单使用示例:添加角色

在本文中,我们将使用 Django 的表单(Forms)功能来创建一个添加角色的页面。 创建 Django 项目和应用 首先,我们创建一个名为 ​​form_demo​​​ 的 Django 项目和一个名为 ​​app01​​ 的应用: django-admin startproject form_demo cd form_demo python manage.py…

在Ubuntu 18.04上安装和配置Ansible的方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 简介 配置管理系统旨在简化对大量服务器的控制&#xff0c;适用于管理员和运维团队。它们允许您从一个中央位置以自动化的方式控制许多…

Matplotlib中文显示解决方案:字体渲染机制与font.sans-serif设置

在Matplotlib中&#xff0c;设置font.sans-serif参数为中文字体如SimHei&#xff0c;可以使图表支持中文显示的原因在于Matplotlib的字体渲染机制。以下是详细解释&#xff1a; 1. **字体支持**&#xff1a; Matplotlib默认使用的字体可能不支持中文字符。大多数西方字体只包含…

Golang - 90天从新手到大师

开篇 最近有很多小伙伴都在寻找go语言完整学习资料&#xff0c;我整理了一些Golang方面的知识&#xff0c;方便大家学习。内容从最基础的入门到项目设计&#xff0c;希望帮助更多想了解和学习Go语言的伙伴。 因为是持续创作&#xff0c;所以也会持续更新。有些章节目录还没有…

mysql高并发环境解决方案有那些?

1、硬件和基础设施优化 1、使用高性能的服务器硬件&#xff0c;如更快的CPU、更大的内存和高速的存储设备。 2、确保网络带宽和延迟不会对数据库性能产生负面影响。 3、使用负载均衡器将请求分发到多个MySQL服务器上&#xff0c;以实现水平扩展。 2、数据库架构优化 1、读…

免费APP分发平台:小猪APP分发如何解决开发者的痛点

你是否曾为自己开发的APP找不到合适的分发平台而烦恼&#xff1f;你是否因为高昂的分发费用而望而却步&#xff1f;放心吧&#xff0c;你并不是一个人。很多开发者都面临同样的问题。但别担心&#xff0c;小猪APP分发来了&#xff0c;它可以帮你解决这些问题。 小猪app封装www…