CE8.【C++ Cont】练习题组6

目录

1.矩阵转置

题目描述

输入格式

输出格式

输入输出样例

错误代码

提交结果

正确代码

提交结果

2.图像相似度

题目描述

输入格式

输出格式

输入输出样例

代码

提交结果

3. 计算矩阵边缘元素之和

题目描述

输入格式

输出格式

输入输出样例

说明/提示

方法1

代码

提交结果

错误排查

正确代码

提交结果

其他写法(推荐)


1.矩阵转置

https://www.luogu.com.cn/problem/B2106

题目描述

输入一个 n 行 m 列的矩阵 A,输出它的转置 A^T

输入格式

第一行包含两个整数 n 和 m,表示矩阵 A 的行数和列数。1≤n≤100,1≤m≤100。

接下来 n 行,每行 m 个整数,表示矩阵 A 的元素。相邻两个整数之间用单个空格隔开,每个元素均在 1∼1000 之间。

输出格式

m 行,每行 n 个整数,为矩阵 A 的转置。相邻两个整数之间用单个空格隔开。

输入输出样例

输入 #1

3 3
1 2 3
4 5 6
7 8 9

输出 #1

1 4 7
2 5 8
3 6 9

错误代码

#include <iostream>
using namespace std;
int main()
{int m,n;int arr[100][100];cin>>m>>n;for (int i=0;i<m;i++){for (int j=0;j<n;j++)cin>>arr[i][j];}for (int i=0;i<m;i++){for (int j=0;j<n;j++)cout<<arr[j][i]<<' ';cout<<"\n";}return 0;
}

提交结果

错因:

只适合m==n(方阵)的情况,而且内循环和外循环的循环变量的最大值没有交换

正确代码

#include <iostream>
using namespace std;
int main()
{int m,n;int arr[100][100];cin>>m>>n;for (int i=0;i<m;i++){for (int j=0;j<n;j++)cin>>arr[i][j];}for (int j=0;j<n;j++){for (int i=0;i<m;i++)cout<<arr[i][j]<<' ';cout<<"\n";}return 0;
}

提交结果

2.图像相似度

https://www.luogu.com.cn/problem/B2103

题目描述

给出两幅相同大小的黑白图像(用 0−1 矩阵)表示,求它们的相似度。

说明:若两幅图像在相同位置上的像素点颜色相同,则称它们在该位置具有相同的像素点。两幅图像的相似度定义为相同像素点数占总像素点数的百分比。

输入格式

第一行包含两个整数 m 和 n,表示图像的行数和列数,中间用单个空格隔开。1≤m≤100,1≤n≤100。

之后 m 行,每行 n 个整数 0 或 1,表示第一幅黑白图像上各像素点的颜色。相邻两个数之间用单个空格隔开。

之后 m 行,每行 n 个整数 0 或 1,表示第二幅黑白图像上各像素点的颜色。相邻两个数之间用单个空格隔开。

输出格式

一个实数,表示相似度(以百分比的形式给出),精确到小数点后两位。

输入输出样例

输入 #1

3 3
1 0 1
0 0 1
1 1 0
1 1 0
0 0 1
0 0 1

输出 #1

44.44

代码

这段代码在算法上毫无问题,但测试用例全都没有通过

#include <iostream>
using namespace std;
int main()
{short img1[100][100];short img2[100][100];short m,n,tmp;cin>>m>>n; for (short i=0;i<m;i++){for (short j=0;j<n;j++)cin>>img1[i][j]; }for (short i=0;i<m;i++){for (short j=0;j<n;j++)cin>>img2[i][j]; }for (short i=0;i<m;i++){for (short j=0;j<n;j++)if (img1[i][j]==img2[i][j])tmp++; }printf("%.2f",100.0*tmp/(m*n));return 0;
}

注意tmp为未初始化的局部变量(随机值!!!),将tmp赋初值为0即可解决问题

提交结果

3. 计算矩阵边缘元素之和

https://www.luogu.com.cn/problem/B2101

题目描述

输入一个整数矩阵,计算位于矩阵边缘的元素之和。

所谓矩阵边缘的元素,就是第一行和最后一行的元素以及第一列和最后一列的元素。

输入格式

第 1 行包含两个整数,分别为行数 m 和列数 n,两个整数之间空格隔开。

第 2 行开始有 m 行数据,每行包含 n 个整数,整数之间空格隔开。

输出格式

对应矩阵的边缘元素和。

输入输出样例

输入 #1

3 3
3 4 1
3 7 1
2 0 1

输出 #1

15

说明/提示

1≤m,n≤100。保证答案在 int 范围内。

方法1

将边缘的元素分为两部分去算

例如下图4*5的矩阵

代码

#include <iostream>
using namespace std;
int main()
{int m,n,sum=0;int arr[100][100];cin>>m>>n;for (int i=0;i<m;i++){for (int j=0;j<n;j++)cin>>arr[i][j];}for (int j=0;j<n;j++){sum+=arr[0][j]+arr[m-1][j];}for (int i=1;i<m-1;i++){sum+=arr[i][0]+arr[i][n-1];}cout<<sum;return 0;
}
提交结果

错误排查

考虑特殊情况:那就是当矩阵的行数或列数为 1 时的情况 所以需要加上特殊判断

当矩阵只有1列或只有1行时,sum的值是错误的,可以推导出程序加了两倍的矩阵,因此当m==1或n==1,算出的sum要除以2

正确代码
#include <iostream>
using namespace std;
int main()
{int m, n, sum = 0;int arr[100][100];cin >> m >> n;for (int i = 0; i < m; i++){for (int j = 0; j < n; j++)cin >> arr[i][j];}for (int j = 0; j < n; j++){sum += arr[0][j] + arr[m - 1][j];}for (int i = 1; i < m - 1; i++){sum += arr[i][0] + arr[i][n - 1];}if (m == 1 || n==1){cout << sum / 2;return 0;}cout << sum;return 0;
}
提交结果

其他写法(推荐)

边缘元素的坐标特点:对于m*n的矩阵,横坐标和纵坐标总是满足以下四种情况

1.横坐标为0,纵坐标在0~n-1之间

2.横坐标为m-1,纵坐标在0~n-1之间

3.纵坐标为0,横坐标在0~m-1之间

4.纵坐标为n-1,横坐标在0~m-1之间

因此可以写出核心处理代码:对数组的每个元素都遍历一次这样就不会出现重复统计的情况

for (i = 0; i < m; i++)
{for (j = 0; j < n; j++){cin >> x;//四个条件满足其一即可if (i == 0 || i == m - 1 || j == 0 || j == n - 1)sum += x;}
}

此种写法不用为数组开辟空间,只通过i和j的值来判断是否要加到sum里

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

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

相关文章

混合开发环境---使用编程AI辅助开发Qt

文章目录 [toc]1、说明2、演示视频 1、说明 新时代的浪潮早就已经来临&#xff0c;上不了船的人终将被抛弃&#xff0c;合理使用AI辅助开发、提升效率是大趋势 注意&#xff1a;不要被AI奴隶 合理使用AI辅助编程&#xff0c;十倍提升效率。 大部分的编程AI都有vs code插件&…

编译笔记:vs 中 正在从以下位置***加载符号 C# 中捕获C/C++抛出的异常

加载符号 解决方法&#xff1a; 进入VS—工具—选项----调试----符号&#xff0c;看右边有个“Microsoft符号服务器”&#xff0c;将前面的勾去掉&#xff0c;&#xff08;可能还有删除下面的那个缓存&#xff09;。 参考 C# 中捕获C/C抛出的异常 在需要捕捉破坏性异常的函数…

【Rust自学】6.1. 定义枚举

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 6.1.1. 什么是枚举 枚举允许我们列举所有可能的值来定义一个类型。这与其他编程语言中的枚举类似&#xff0c;但 Rust 的枚举更加灵活和强…

QT笔记- QClipboard剪切板对QByteArray数据的复制与粘贴

复制 // 存储在剪切板 QByteArray data; QClipboard * clipboard QGuiApplication::clipboard(); // 获取系统剪贴板对象 QMimeData * mimeData new QMimeData; // 注意, 剪切板会接管对象的释放 QString customMimeType "Test"; // 设置数据标识, 粘贴时将根据…

哪个网页版思维导图好用?这5款高效软件不容错过!

眼下虽然每个人的电脑硬盘越来越大&#xff0c;但很多人还是保留着“能不装软件就不装”的理念&#xff0c;在选择办公软件时&#xff0c;会更倾向于选用推出了网页版的软件&#xff0c;这对思维导图来说也不例外。 那具体到思维导图网页版&#xff0c;有哪些软件值得推荐&…

【双指针算法】--复写零

文章目录 1. 题目2. 题目解析3. 代码 1. 题目 在线oj 给你一个长度固定的整数数组 arr &#xff0c;请你将该数组中出现的每个零都复写一遍&#xff0c;并将其余的元素向右平移。 注意&#xff1a;请不要在超过该数组长度的位置写入元素。请对输入的数组 就地 进行上述修改&a…

石岩基督教福音堂

周末娃&#xff0c;娃的阿婆和我一起去石岩基督教福音堂做礼拜。 这是我第一次进入石岩的教堂。教堂很高。应该有3,4层楼高。 这周末做礼拜的人很多一楼人满了&#xff0c;阿婆去二楼做礼拜&#xff0c;娃和我去三楼的儿童室。很多家长楼下做礼拜&#xff0c;小朋友被安排三楼…

通过Hydra 配置文件实例化Lightning类

通过 Hydra 的配置文件灵活控制 LightningModule、LightningDataModule、Callback 和 Trainer 的实例化过程。 Lightning 与 Hydra 的结合 1. 配置文件结构 一个典型的配置文件目录可能如下: configs/ ├── callbacks/ │ ├── early_stopping.yaml │ ├── che…

Flutter 异步编程简述

1、isolate 机制 1.1 基本使用 Dart 是基于单线程模型的语言。但是在开发当中我们经常会进行耗时操作比如网络请求&#xff0c;这种耗时操作会堵塞我们的代码。因此 Dart 也有并发机制 —— isolate。APP 的启动入口main函数就是一个类似 Android 主线程的一个主 isolate。与…

从 $PGDATA 到文件组:深入解析 PostgreSQL 与 SQL Server 的存储策略

在数据库领域,数据存储和管理的效率与可靠性是决定系统性能、可扩展性和易于管理的关键因素。PostgreSQL 和 SQL Server 在数据存储方面采取了略有不同的方式。 PostgreSQL 中一个数据库管理员经常遇到的关键概念是 $PGDATA 文件夹。在这里,我们将探讨 $PGDATA 文件夹是什么…

24.12.25 AOP

前置通知环绕通知后置通知最终通知异常通知 API类似&#xff0c;只是生效的时机不一样&#xff0c;并且&#xff0c;不能保证&#xff0c;各个通知的顺序 try {//前置通知before();//环绕通知&#xff0c;内部是执行的方法around(proxy,method,args,methodProxy);//后置通知a…

uni-app 统一请求处理 请求拦截器 响应拦截器 请求封装

封装API接口 import {http} from ../utils/request.js export function login(code){return http({url:/wx/getSession,method: GET,data:{code}}) }调用接口 import {login,test,phoneMessage,updateAvatar} from ../../api/user.js function userLogin(){ login(code.value…

IDEA用jformdesigner插件做管理系统MVC架构

在 IntelliJ IDEA 中结合 JFormDesigner 插件&#xff0c;通过 Swing 框架实现一个管理系统的 MVC 架构是一种经典的开发方式。以下是具体的步骤和实现思路&#xff0c;包含从项目创建到 MVC 架构的核心代码实现。 1. 项目结构设计 为了清晰的 MVC 分层架构&#xff0c;建议按…

Linux内核调度优先级详解:如何优化你的系统性能

个人主页&#xff1a;chian-ocean 文章专栏-Linux 前言&#xff1a; 进程优先级调度是操作系统中的一种调度机制&#xff0c;其核心是为每个进程分配一个 优先级&#xff08;Priority&#xff09;&#xff0c;然后根据优先级的高低决定进程执行的顺序和时间。这种机制确保了关…

Axure RP9 的详细安装及Axure入门应用

文章目录 一、Axure 是什么?二、Axure 的应用场景三、Axure 安装1. 下载安装2. 汉化授权 附&#xff1a;下载链接 一、Axure 是什么? 1、Axure 是一种强大的原型设计工具&#xff0c;它可以帮助设计师和产品经理快速创建交互式的、高保真度的原型&#xff0c;并进行用户体验…

pro文件转换为CMakeLists.txt文件,QT官方工具使用教程

某些情况需要使用cmake&#xff0c;如果手动将QT的pro文件转换成CMakeLists.txt&#xff0c;简短一点的pro还好&#xff0c;如果是比较复杂的pro&#xff0c;手动转换的时候需要长时间的debug&#xff0c;本人深有感受。 工具介绍&#xff1a; qmake2cmake工具创建一个CMakeL…

CDN信息收集(小迪网络安全笔记~

免责声明&#xff1a;本文章仅用于交流学习&#xff0c;因文章内容而产生的任何违法&未授权行为&#xff0c;与文章作者无关&#xff01;&#xff01;&#xff01; 附&#xff1a;完整笔记目录~ ps&#xff1a;本人小白&#xff0c;笔记均在个人理解基础上整理&#xff0c;…

深度学习实战车辆目标跟踪【bytetrack/deepsort】

本文采用YOLOv8作为核心算法框架&#xff0c;结合PyQt5构建用户界面&#xff0c;使用Python3进行开发。YOLOv8以其高效的实时检测能力&#xff0c;在多个目标检测任务中展现出卓越性能。本研究针对车辆目标数据集进行训练和优化&#xff0c;该数据集包含丰富的车辆目标图像样本…

windows使用zip包安装MySQL

windows通过zip包安装MySQL windows通过zip包安装MySQL下载MySQL的zip安装包创建安装目录和数据目录解压zip安装包创建配置目录 etc 和 配置文件 my.ini安装MySQL进入解压后的bin目录执行命令初始化执行命令安装 验证安装查看服务已安装 启动MySQL查看服务运行情况修改密码创建…

Dots 常用操作

游戏中有多个蚂蚁群落&#xff0c;每个蚂蚁属于一个群落&#xff0c;如何设计数据结构&#xff1f; 方法1&#xff1a;为蚂蚁组件添加一个属性 ID&#xff0c;会造成逻辑中大量分支语句&#xff0c;如果分支语句逻辑不平衡可能带来 Job 调度问题&#xff0c;每个蚂蚁会有一份蚂…