C++ //CCF-CSP计算机软件能力认证 202406-1 矩阵重塑(其一)

CCF-CSP计算机软件能力认证 202406-1

矩阵重塑(其一)

题目背景

矩阵(二维)的重塑(reshape)操作是指改变矩阵的行数和列数,同时保持矩阵中元素的总数不变。

题目描述

矩阵的重塑操作可以具体定义为以下步骤:

设原矩阵为 M M M,其维度为 n × m n \times m n×m,即有 n n n行和 m m m列。新矩阵为 M ′ M' M,其维度为 p × q p \times q p×q。重塑操作要满足 n × m = p × q n \times m = p \times q n×m=p×q,这保证了元素的总数不变。

  1. 线性化原矩阵: 按照行优先的顺序,将原矩阵 M M M的元素转换成一个长度为 n × m n \times m n×m的一维数组 A A A。这意味着你先读取 M M M的第 0 0 0行元素,然后是第 1 1 1行,依此类推,直到最后一行。
  2. 填充新矩阵: 使用一维数组 A A A中的元素按照行优先的顺序填充新矩阵 M ′ M' M。首先填充 M ′ M' M的第 0 0 0行,直到该行有 q q q个元素,然后继续填充第 1 1 1行,直到所有 p p p行都被填满。

给定原矩阵中的一个元素的位置 ( i ,   j )   ( 0 ≤ i < n 且 0 ≤ j < m ) (i, \ j)\ (0 \le i \lt n 且 0 \le j \lt m) (i, j) (0i<n0j<m),我们可以找到这个元素在被线性化后的一维数组 A A A中的位置 k   ( 0 ≤ k < n × m ) k\ (0 \le k \lt n \times m) k (0k<n×m),然后确定它在新矩阵 M ′ M' M中的位置 ( i ′ ,   j ′ )   ( 0 ≤ i ′ < p 且 0 ≤ j < q ) (i', \ j') \ (0 \le i' \lt p 且 0 \le j \lt q) (i, j) (0i<p0j<q)。它们之间满足如下数学关系:
i × m + j = k = i ′ × q + j ′ i \times m + j = k = i' \times q + j' i×m+j=k=i×q+j
给定 n × m n \times m n×m的矩阵 M M M和目标形状 p p p q q q,试将 M M M重塑为 p × q p \times q p×q的矩阵 M ′ M' M

输入格式

从标准输入读入数据。
输入共 n + 1 n+1 n+1行。
输入的第一行包含四个正整数 n n n m m m p p p q q q
接下来依次输入原矩阵 M M M的第 0 0 0到第 n − 1 n-1 n1行,每行包含 m m m个整数,按列下标从 0 0 0 m − 1 m-1 m1的顺序依次给出。

输出格式

输出到标准输出。
输出共 p p p行,每行 q q q个整数,表示重塑后的矩阵 M ′ M' M。输出格式与输入相同,即依次输出 M ′ M' M的第 0 0 0行到第 p − 1 p-1 p1行;行内按列下标从 0 0 0 q − 1 q-1 q1的顺序输出,且两个整数间仅用一个空格分隔。

样例1输入

2   3   3   2
1   2   3
4   5   6

样例1输出

1   2
3   4
5   6

样例2输入

2   2   1   4
6   6
6   6

样例2输出

6   6   6   6

子任务

全部的测试数据满足:

  • n n n m m m p p p q q q均为正整数且 n × m = p × q ≤ 1 0 4 n \times m = p \times q \le 10^4 n×m=p×q104
  • 输入矩阵中每个元素的绝对值不超过1000。
环境:Linux Ubuntu(云服务器)
工具:vim
代码块:
/*************************************************************************
	> File Name: ex20240601.cpp
	> Author: 
	> Mail: 
	> Created Time: Fri 14 Jun 2024 02:39:03 PM CST
 ************************************************************************/

#include<iostream>
using namespace std;

void initialMatrix(int n, int m, int ***matrix){
	*matrix = (int**)malloc(n * sizeof(int*));
	for(int i = 0; i < n; i++){
		(*matrix)[i] = (int*)malloc(m * sizeof(int));
	}
}

void freeMatrix(int n, int m, int ***matrix){
	for(int i = 0; i < n; i++){
		free((*matrix)[i]);
	}
	free(*matrix);
}

void inputMatrix(int n, int m, int **matrix){
	for(int i = 0; i < n; i++){
		for(int j = 0; j < m; j++){
			cin>>matrix[i][j];
		}
	}
}

void outputMatrix(int p, int q, int **matrix){
	for(int i = 0; i < p; i++){
		for(int j = 0; j < q; j++){
			cout<<matrix[i][j]<<" ";
		}
		cout<<endl;
	}
}

void reshape(int n, int m, int p, int q, int **matrix, int **newMatrix){
	int total = n * m;
	int *temp = (int*)malloc(total * sizeof(int));

	for(int i = 0, k = 0; i < n; i++){
		for(int j = 0; j < m; j++){
			temp[k++] = matrix[i][j];
		}
	}

	for(int i = 0, k = 0; i < p; i++){
		for(int j = 0; j < q; j++){
			newMatrix[i][j] = temp[k++];
		}
	}

	free(temp);
}

int main(){
	int n, m, p, q;
	int **matrix = NULL;
	int **newMatrix = NULL;

	cin>>n>>m>>p>>q;

	initialMatrix(n, m, &matrix);
	inputMatrix(n, m, matrix);

	initialMatrix(p, q, &newMatrix);
	reshape(n, m, p, q, matrix, newMatrix);

	outputMatrix(p, q, newMatrix);

	freeMatrix(n, m, &matrix);
	freeMatrix(p, q, &newMatrix);

	return 0;
}
运行结果显示如下

在这里插入图片描述

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

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

相关文章

PostgreSQL基础(十四):PostgreSQL的数据迁移

文章目录 PostgreSQL的数据迁移 PostgreSQL的数据迁移 PostgreSQL做数据迁移的插件非常多&#xff0c;可以从MySQL迁移到PostgreSQL也可以基于其他数据源迁移到PostgreSQL。 这种迁移的插件很多&#xff0c;这里只说一个&#xff0c;pgloader&#xff08;非常方便&#xff0…

白嫖Cloudflare Workers 搭建 Docker Hub镜像加速服务

简介 基于Cloudflare Workers 搭建 Docker Hub镜像加速服务。 首先要注册一个Cloudflare账号。 Cloudflare账号下域名的一级域名&#xff0c;推荐万网注册个top域名&#xff0c;再转移到Cloudflare&#xff0c;很便宜的。 注意 Worker 每天每免费账号有次数限制&#xff0c;…

03.VisionMaster 机器视觉 位置修正 工具

VisionMaster 机器视觉 位置修正 工具 官方解释&#xff1a;位置修正是一个辅助定位、修正目标运动偏移、辅助精准定位的工具。可以根据模板匹配结果中的匹配点和匹配框角度建立位置偏移的基准&#xff0c;然后再根据特征匹配结果中的运行点和基准点的相对位置偏移实现ROI检测…

Android Compose 十一:常用组件列表 compose自己个的 下拉刷新

列表下拉刷新 material3 还没有下拉刷新功能material:1.3.0 之后 swiperefresh 被弃用 被PullRefresh替代使用PullRefresh 需要添加依赖 implementation ‘androidx.compose.material:material:1.6.8’ 先上代码 var refreshing by remember {mutableStateOf(false)} val…

C语言----C语言内存函数

1.memcpy--内存拷贝--使用和模拟实现 //memcpy基本格式&#xff1a; // 目标空间地址 原空间地址 被拷贝的字节个数 //void *memcpy(void * destination, const void * source,size_t num); //因为内存拷贝拷贝的数据有&#xff1a;整型数据、结构…

基于JSP技术的电子商城系统

开头语&#xff1a; 你好&#xff0c;我是计算机学长码农猫哥。如果你对电子商城系统感兴趣或有相关开发需求&#xff0c;欢迎联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术 工具&#xff1a;Eclipse、Tomcat 系统展示 首页 管理…

MySQL----常见的存储引擎

存储引擎 存储引擎就是数据库如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的&#xff0c;所以存储引擎也可以称为表类型&#xff08;即存储和操作此表的类型&#xff09;。 MySQL存储引擎 M…

(el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程

Ⅰ、Element-plus 提供的Select选择器组件与想要目标情况的对比&#xff1a; 1、Element-plus 提供Select组件情况&#xff1a; 其一、Element-ui 自提供的Select代码情况为(示例的代码)&#xff1a; // Element-plus 提供的组件代码: <template><div class"f…

C# 中的日志记录技术详细解析与示例

文章目录 1. C# 日志记录的基本概念与重要性2. C# 中的日志记录主要方法使用 Console.WriteLine使用 System.Log* 类使用第三方日志库 3. 创建和配置日志记录器的基本步骤4. 不同情境下的日志记录应用示例示例 1&#xff1a;使用 Console.WriteLine示例 2&#xff1a;使用 Debu…

代码随想录——组合总和(Leetcode LCR81)

题目链接 回溯 class Solution {List<List<Integer>> res new ArrayList<List<Integer>>();List<Integer> list new ArrayList<Integer>();public List<List<Integer>> combinationSum(int[] candidates, int target) {b…

智能计算系统-概述

1、人工智能技术分层 2、人工智能方向人才培养 3、课程体系的建议 4、智能系统课程对学生的价值 5、智能计算系统对老师的价值 6、什么是智能计算系统 7、智能计算系统的形态 8、智能计算系统具有重大价值 9、智能计算系统的三大困难 10、开创深度学习处理器方向 11、寒武纪的国…

关于钽电容器的作用、优缺点、选型指南及故障诊断方法等介绍

钽电容器&#xff0c;全称为钽电解电容器&#xff0c;是一种以金属钽作为介质材料的电解电容器。与传统的电解电容器不同&#xff0c;钽电容器不使用液体电解质&#xff0c;而是利用钽氧化物&#xff08;五氧化二钽&#xff09;作为固态电解质&#xff0c;这使得它们具有更高的…

【立体几何】如何使用两个正方体(特殊骰子)摆出所有日期1~31

问题 如何使用两个正方体(特殊骰子)摆出所有日期? 解答 下标列举了所有日期 日期十位数个位数011号正方体&#xff1a;02号正方体&#xff1a;02号正方体&#xff1a;11号正方体&#xff1a;1021号正方体&#xff1a;02号正方体&#xff1a;02号正方体&#xff1a;21号正方…

找我设计官网的不多了,看到漂亮大气的,还是忍不住分享出来。

现在有客户找我做官网设计&#xff0c;我说&#xff1a;要么搞个高大上个性化定制的&#xff0c;要么就选个模板得了&#xff0c;几千元的网站不上不下&#xff0c;不如不做。 分享一批高大上的网站给老铁们看看。

网络安全 - DNS劫持原理 + 实验

DNS 劫持 什么是 DNS 为什么需要 DNS D N S \color{cyan}{DNS} DNS&#xff08;Domain Name System&#xff09;即域名系统。我们常说的 DNS 是域名解析协议。 DNS 协议提供域名到 IP 地址之间的解析服务。计算机既可以被赋予 IP 地址&#xff0c;也可以被赋予主机名和域名。用…

基于JSP技术的定西扶贫惠农推介系统

开头语&#xff1a;你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果有相关需求&#xff0c;文末可以找到我的联系方式。 开发语言&#xff1a;JSP 数据库&#xff1a;MySQL 技术&#xff1a;B/S架构、JSP技术 工具&#xff1a;Eclipse、MySQL、Tomcat 系统展示 首…

H5的3D展示有可能代替PC传统3D展示么?

H5的3D展示技术正在快速发展&#xff0c;并且随着5G网络的普及和手机硬件性能的提升&#xff0c;H5的3D展示在某些方面已经能够接近甚至超越传统PC上的3D展示效果&#xff0c;比如 博维数孪 的渲染能力及效果。但H5和PC的3D展示互相之间是各有优势领域和行业支持&#xff0c;短…

机器学习:人工智能的子领域之一

引言 人工智能&#xff08;AI&#xff09;已经成为现代科技的重要组成部分&#xff0c;推动了许多领域的创新与进步。在人工智能的诸多子领域中&#xff0c;机器学习&#xff08;ML&#xff09;无疑是最关键和最具影响力的一个。机器学习通过自动分析和学习数据中的模式&#x…

【ARM Cache 及 MMU 系列文章 1.3 -- 如何判断 L2 Cache 是否实现?】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 CPU Configuration Register代码实现CPU Configuration Register 在 Armv9 架构中,我们可以通过arm 提供的自定义寄存器IMP_CPUCFR_EL1 来判断当前系统中是否实现了 L2 Cache, 如下所…

泰坦尼克号数据集机器学习实战教程

泰坦尼克号数据集是一个公开可获取的数据集&#xff0c;源自1912年沉没的RMS泰坦尼克号事件。这个数据集被广泛用于教育和研究&#xff0c;特别是作为机器学习和数据分析的经典案例。数据集记录了船上乘客的一些信息&#xff0c;以及他们是否在灾难中幸存下来。以下是数据集中主…