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

news2024/11/29 8:37:40

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;
}
运行结果显示如下

在这里插入图片描述

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

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

相关文章

自动控制理论---离散傅里叶变换(DFT)进行信号谱分析

1、实验设备 PC计算机1台&#xff0c;MATLAB软件1套。 2、实验目的&#xff1a; 学习使用离散傅里叶变换&#xff08;DFT&#xff09;进行信号谱分析的方法。选择合适的变换区间长度N&#xff0c;对给定信号进行谱分析&#xff0c;并绘制幅频特性和相频曲线。 3、实验原理说…

Python武器库开发-武器库篇之SMB服务暴力破解(五十五)

Python武器库开发-武器库篇之SMB服务暴力破解(五十五) SMB服务&#xff08;Server Message Block&#xff09;是一种用于文件共享、打印机共享和其他资源共享的网络协议。它最初由IBM开发&#xff0c;后来被微软广泛采用。 SMB服务允许多台计算机在网络上共享文件和资源&…

使用 3D 图形 API 在 C# 中将 PLY 转换为 OBJ

OBJ和PLY是一些广泛使用的 3D 文件格式&#xff0c;易于编写和读取。这篇博文演示了如何以编程方式在 C# 中将 PLY 转换为 OBJ。此外&#xff0c;它还介绍了一种用于 3D 文件格式转换的在线3D 转换器。是的&#xff0c;Aspose.3D for .NET为程序员和非程序员提供了此功能来执行…

C# Winform Chart图表使用和详解

Chart控件是微软自带的一种图形可视化组件&#xff0c;能展示种类丰富的图表形式。如曲线图&#xff0c;折线图&#xff0c;饼状图&#xff0c;环形图&#xff0c;柱状图&#xff0c;曲线面积图。 实例代码链接&#xff1a;https://download.csdn.net/download/lvxingzhe3/8943…

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

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

java第二十三课 —— 继承

面向对象的三大特征 继承 继承可以解决代码复用&#xff0c;让我们的编程更加靠近人类思维&#xff0c;当多个类存在相同的属性&#xff08;变量&#xff09;和方法时&#xff0c;可以从这些类中抽象出父类&#xff0c;在父类中定义这些相同的属性和方法&#xff0c;所有的子…

Anaconda环境安装失败的解决方案

链接步骤的补充。 为了运行marlib&#xff0c;需要一个全新的Anaconda环境。但是&#xff0c;不想把文件安装在C盘&#xff0c;会造成空间不足。于是试着在.condarc文件里面改动了路径&#xff0c;具体如图。 上图中&#xff0c;在defaults前面添加了D盘的路径作为安装路径。 …

增材制造引领模具创新之路

随着科技的快速发展和制造业的不断转型升级&#xff0c;增材制造&#xff08;也称为3D打印&#xff09;技术正逐渐展现出其在模具智造中的巨大潜力和优势。增材制造以其独特的加工方式和设计理念&#xff0c;为模具行业带来了革命性的变革&#xff0c;为传统制造业注入了新的活…

【odoo | XML-RPC】odoo外部API解读,实现跨系统间的通讯!

概要 文章注意对官方的XML-RPC进行解读实操&#xff0c;以python为例&#xff0c;给大家介绍其使用方式和调用方法。 内容 什么是odoo的外部API? Odoo 的外部 API 是一种允许外部应用程序与 Odoo 实例进行交互的接口。通过 API&#xff0c;可以执行各种操作&#xff0c;例如…

如果给电商系统颜值搞排名,我觉得淘宝千牛系统是天花板了。

淘宝的商家操作界面-千牛系统经过多年的迭代&#xff0c;无论从颜值上、功能上还是用户体验上都是行业天花板的存在&#xff0c;我截图软件上的一些图给大家分享下。

helm升级部署时出现升级挂起状态处理

问题 在使用helm 升级命令时&#xff0c;升级命令如下&#xff1a; helm upgrade -i -f ./values-prod.yaml myapp ./ -n myns --create-namespace中途因为网络原因&#xff0c;再次运行上面升级命令时出现&#xff0c;如下错误&#xff1a; Error: UPGRADE FAILED: another …

linux centos 安装docker

本章教程介绍如何在Linux CentOS中安装Docker服务。 1. 更新系统软件包 首先,确保你的系统软件包是最新的: sudo yum update -y2. 安装必要的依赖包 安装一些必要的依赖包: sudo yum install -y yum-utils device-mapper-persistent-data lvm23. 添加 Docker 的官方仓库…

Redis订阅发布你会用了吗?

点击下方“JavaEdge”&#xff0c;选择“设为星标” 第一时间关注技术干货&#xff01; 免责声明~ 任何文章不要过度深思&#xff01; 万事万物都经不起审视&#xff0c;因为世上没有同样的成长环境&#xff0c;也没有同样的认知水平&#xff0c;更「没有适用于所有人的解决方案…

[数据集][目标检测]变电站火灾检测电力场景烟雾明火检测数据集VOC+YOLO格式140张2类别真实场景非PS合成

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;140 标注数量(xml文件个数)&#xff1a;140 标注数量(txt文件个数)&#xff1a;140 标注类别…

Prometheus的四种指标类型

目录 一、Counter 计数器 1.1Counter 是计数器类型 1.2Counter 类型示例 二、Gauge 仪表盘 2.1Gauge是测量器类型 2.2Gauge 类型示例 三、Histogram 累积直方图 3.1Histogram 作用及特点 3.2使用 histogram 柱状图 四、Summary 摘要 一、Counter 计数器 1.1Counter …

Java高级特性

引言 Java不仅提供了基础的编程功能&#xff0c;还包括了一系列强大的高级特性&#xff0c;这些特性能够显著提高代码的灵活性、可扩展性和性能。本文将详细介绍Java的几个高级特性&#xff0c;包括反射机制、注解与注释、泛型编程、以及Lambda表达式与Stream API&#xff0c;并…

AntDB数据库中级认证(ACP)题库

单项选择题 共35题&#xff0c;大题得分&#xff1a;62.0&#xff0c;大题满分&#xff1a;70.0 1.函数计算外移的作用&#xff1f; A. 增加计算量 B. 减少计算量 C. 减少冗余查询 D. 改变关联顺序 2.0&#xff08;本题分数&#xff1a;2.0&#xff09; 学员答案&#…

Stable Diffusion 【AI绘画提示词】摄影效果提示词,超美摄影效果摄影特效!让平凡的照片焕发出独特的魅力!

高端的摄影作品需要的专业设备价格昂贵&#xff0c;并不是一般人能够承受的起的&#xff0c;优质摄影作品对光线等一系列要求也非常的高&#xff0c;而AI摄影就完美的解决了这些问题&#xff0c;只需要配合适当的提示词&#xff0c;这些问题都可以迎刃而解。 AI绘画没灵感&…

几款让你怦然心动的神奇工具——搜嗖工具箱

alteredqualia AlteredQualia 脑洞爆炸器网站&#xff0c;不得不说这是一个神奇的网站&#xff0c;在这个网站上你可以实现不可思议的各种操作&#xff0c;让我们对网站有了新的认知&#xff0c;因为它告诉你不是所有有趣的网站都那么花哨&#xff0c;有些网站看着外形平淡无奇…