算法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/

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言| 数组的顺序查找

顺序查找 查找数组a中第一次出现数字m的下标&#xff0c;并输出该下标&#xff1b; 如果没有则输出sorry。 1 定义变量 数组a&#xff0c;n表示数组的个数&#xff0c; m要查找的数字 2 用sizeof()函数&#xff0c;求出数组元素的个数 3 从键盘中任意输出一个数字m&#xff0c;…

大疆炸机后MOV修复方法(DJI Inspire 3)

dji大疆可以说是无人机中的华为&#xff0c;产品线之广性能之高让高傲的美国人侧面&#xff0c;质量和性价比才是王道。另外产品线的细分也是制胜法宝&#xff0c;无论是手持、农用机、特殊无人机还是影视级产品DJI都有涉及&#xff0c;给人的感觉就是在无人机细分方面它已经无…

信号基本分析方法——频域分析

二、频域分析 随机信号的时域分析只能提供有限的时域故障特征信息&#xff0c;故障发生时往往会引起信号频率结构的变化&#xff0c;而故障频率可以计算和预知&#xff0c;通过检测频率的幅值变换规律&#xff0c;就可以监控故障的发展过程。 频谱分析的理论基础是傅里叶变换…

支持 MKV、MP4、AVI、MPG 等格式视频转码器

一、简介 1、一款开源的视频转码器&#xff0c;适用于 Linux、Mac 和 Windows。它是一个免费的工具&#xff0c;由志愿者们开发&#xff0c;可以将几乎所有格式的视频转换为现代、广泛支持的编码格式。你可以在官网上下载该应用或源代码。该软件支持 MKV、MP4、AVI、MPG 等格式…

Graphviz——实现动态更新协议状态机

1、描述 为了实现动态更新协议状态机&#xff0c;首先需要定义类来表示协议状态机。初始化该类后&#xff0c;保存状态机对象。在后续更新过程中&#xff0c;就可以加载保存的状态机对象&#xff0c;添加新的状态或事件。Graphviz的安装过程参考&#xff1a;Graphviz——安装、…

PCL 三次样条插值(二维点)

一、简介 在插值计算中,最简单的分段多项式近似应该是分段线性插值,它由连接一组数据点组成,仅仅只需要将这些点一一用直线进行顺序相连即可。不过线性函数插值的缺点也很明显,就是在两个子区间变化的比较突兀,也就是没有可微性(不够光滑)。因此我们需要更为符合物理情况…

海外云手机自动化管理,高效省力解决方案

不论是企业还是个人&#xff0c;对于海外社媒的营销都是需要自动化管理的&#xff0c;因为自动化管理不仅省时省力&#xff0c;而且还节约成本&#xff1b; 海外云手机的自动化管理意味着什么&#xff1f;那就是企业无需再投入大量的人力和时间去逐一操作和监控每一台设备。 通…

波兰出局奥地利无限可能,荷法无谓争小组第一,谁能小组第一?

波兰出局奥地利无限可能,荷法无谓争小组第一,谁能小组第一&#xff1f; 2024欧洲杯D组结束小组赛第2轮争夺&#xff0c;积分榜形式如下&#xff1a;荷兰与法国均1胜1平积4分&#xff0c;两队之间直接对话战平&#xff0c;净胜球也均为1&#xff0c;荷兰凭借总进球数多1个暂列榜…

Python星载气溶胶数据处理与反演分析

在当前全球气候变化和环境污染问题日益突出的背景下&#xff0c;气溶胶研究显得尤为重要。气溶胶在大气中由直径范围在0.01微米至10微米固体和液体颗粒构成&#xff0c;直接或间接影响地球辐射平衡、气候变化和空气质量。尤其在“碳中和”目标的驱动下&#xff0c;研究气溶胶对…

韩顺平0基础学java——第29天

p592-599 线程 用户线程和守护线程 1.用户线程:也叫工作线程&#xff0c;当线程的任务执行完或通知方式结束 2守护线程:一般是为工作线程服务的&#xff0c;当所有的用户线选束&#xff0c;守护线程自动结束 3.常见的守护线程:垃圾回收机制 当我们希望当main线程结束后&…

高性能、高可靠性!Kafka的技术优势与应用场景全解析

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货!​​​​​​​ 大家好,我是你们的小米,今天要和大家聊聊一个超级强大的消息系统——Kafka。很多同学可能对它还不太熟悉,不过没关系,今天我就带你们…

从一到无穷大 #29 ByteGraph的计算,内存,存储三级分离方案是否可以通用化为多模数据库

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作)&#xff0c;由 李兆龙 确认&#xff0c;转载请注明版权。 文章目录 引言ByteGraph现有架构阿里云Lindorm腾讯YottaDB多模型化修改点ByteGraph论文中的优化…

Linux中的全局环境变量和局部环境变量

Linux中的全局环境变量和局部环境变量 一、全局环境变量二、局部环境变量三、 设置全局环境变量 bash shell用一个叫作环境变量 &#xff08;environment variable&#xff09;的特性来存储有关shell会话和工作环境的信息&#xff08;这也是它们被称作环境变量的原 因&#xff…

Qt利用Coin3D(OpenInventor)进行3d绘图

文章目录 1.安装1.1.下载coin3d1.2.下载quarter1.3.解压并合并 2.在Qt中使用3.画个网格4.加载wrl模型5.画个锤子并旋转6.加载自定义视口文件 1.安装 1.1.下载coin3d 首先&#xff0c;到官网下载[coin3d/coin] 我是Qt5.15.2vs2019的&#xff0c;因此我选择这个coin-4.0.2-msvc…

“脏读”、“幻读”、“不可重复读”

“脏读”、“幻读”、“不可重复读” 1.概念说明 “脏读”、“幻读”、“不可重复读”是数据库事务的概念。 “脏读”是指一个事务中访问到了另外一个事务未提交的数据。 “不可重复读”是指在一个事务内根据同一个条件对数据进行多次查询&#xff0c;但是结果却不一致&…

某程序员:30岁了,老婆管钱,背着我买了50万股票,亏了20w,强制她清仓后又买了36万

“辛辛苦苦攒了几年钱&#xff0c;本想买房买车&#xff0c;结果全被老婆炒股亏掉了&#xff01;” 近日&#xff0c;一位30岁的程序员大哥在网上吐苦水&#xff0c;引发了网友们的热议。 这位程序员大哥和妻子结婚后&#xff0c;一直秉持着“男主外&#xff0c;女主内”的传统…

如何使用gprof对程序进行性能分析

如何使用gprof对程序进行性能分析 目录 1 gprof概述 2 gprof原理简述 3 gprof使用 3.1 gprof使用简述 3.2 gprof使用示例 4 小结 1 gprof概述 gprof 是 一个 GNU 的程序性能分析工具&#xff0c;可以用于分析C\C程序的执行性能。gprof工具可以统计出各个函数的调用次数、执…

修改docker中mongodb容器的时区

假设容器名称为mongodb&#xff0c;设置时区为伤害时区的命令为&#xff1a; docker exec -it mongodb bash -c "ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezone"验证时区更改&#xff1a; docker e…

【CT】LeetCode手撕—42. 接雨水

目录 题目1- 思路2- 实现⭐42. 接雨水——题解思路 3- ACM实现 题目 原题连接&#xff1a;42. 接雨水 1- 思路 模式识别&#xff1a;求雨水的面积 ——> 不仅是只求一个比当前元素大的元素&#xff0c;还要求面积 单调栈 应用场景&#xff0c;需要找到左边比当前元素大的…

如何用Spring使用Redis作为消息订阅?

目录 一、Spring 框架介绍二、Redis 框架介绍三、什么是消息订阅四、如何用Spring使用Redis作为消息订阅 一、Spring 框架介绍 Spring 框架是一个开源的 Java 平台&#xff0c;它提供了全面的基础设施支持&#xff0c;以便您可以更容易地开发 Java 应用程序。Spring 处理了基础…