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

在这里插入图片描述

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

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

相关文章

秋招突击——第三弹——Java的SSN框架快速入门——SpringMVC

文章目录 说明SpringMVC简介入门案例入门案例的工作流程配置环境的问题步骤总结注释学习开发模式Severlet容器类配置入门案例工作流程分析Bean加载控制 Postman工具请求 请求和响应请求映射路径请求参数普通参数设置过滤器&#xff0c;对输入进行处理 Json数据传递参数注释学习…

eclipse中报出Invaild project path

一、问题&#xff1a; 二、提示分析&#xff1a; 资源路径位置类型无效的项目路径&#xff1a;找到重复的路径条目 项目路径中有一个名为"/eclipse_rtt_demo"的条目被多次定义&#xff0c;这在Eclipse的构建路径设置中是不允许的。这个重复的条目既被标记为系统包含…

利用免费的可视化组件,零代码制作一个电商销量大屏居然这么简单!

每到一年一度的618和双十一时&#xff0c;由于各种平台的优惠力度&#xff0c;使人们纷纷清空购物车下单&#xff0c;而在这庞大的销售数据下&#xff0c;各大商家却能够在第一时间发布整体销售业绩和数额&#xff0c;在这高效且巨大的数据背后&#xff0c;你是否有了解过展示数…

大模型系列:Prompt提示工程常用技巧和实践

前言 Prompt提示语是使用大模型解决实际问题的最直接的方式&#xff0c;本篇介绍Prompt提示工程常用的技巧&#xff0c;包括Zero-Shot、Few-Shot、CoT思维链、Least-to-Most任务分解。 内容摘要 Prompt提示工程简述Prompt的一般结构介绍零样本提示Zero-Shot少样本提示Few-Sho…

Java——面向对象进阶(三)

前言&#xff1a; 抽象类&#xff0c;接口&#xff0c;内部类 文章目录 一、抽象类1.1 抽象方法1.2 抽象类1.3 抽象类的使用 二、 接口2.1 接口的定义和实现2.2 default 关键字2.3 实现接口时遇到的问题 三、内部类3.1 成员内部类3.2 静态内部类3.3 成员内部类3.4 匿名内部类&a…

Docker 镜像库国内加速的几种方法

在国内&#xff0c;拉取 Docker 镜像速度慢 / 时不时断线 / 无账号导致限流等&#xff0c;比较痛苦。 这里提供几个当前可用的镜像仓库&#xff0c;更新到/etc/docker/daemon.json即可。 更新完记得运行&#xff1a; sudo systemctl daemon-reload sudo systemctl restart …

【AI绘画】教你一个完美的文生图方法,简单易学好上手,新手也能轻松掌握Stable Diffusion使用!

当我们还在思索&#xff0c; AI&#xff08;人工智能&#xff09;是否能替代人类的地位&#xff0c; 它已悄然无声&#xff0c; 融入我们生活的点滴细节。 在艺术创作领域&#xff0c; AI技术作为核心力量&#xff0c;展现其无尽的魅力。 AI换脸、AI影像&#xff0c;AI角色、A…

自学C语言-9

** 第9章 函数 ** 大型程序一般会被分为若干个程序模块&#xff0c;每个模块实现一个特定功能 。C语言中&#xff0c;由函数实现子程序&#xff0c;由子程序实现模块功能。本章致力于使读者了解函数的概念&#xff0c;掌握函数的定义及调用方式&#xff1b;了解内部函数和外部…

基于51单片机太阳能热水器设计

基于51单片机太阳能热水器 &#xff08;仿真&#xff0b;程序&#xff09; 功能介绍 具体功能&#xff1a; 1.LCD1602显示屏第一行显示温度&#xff0c;第二行显示温度下限&#xff1b; 2.按键可以设置温度的下限&#xff0c;控制出水&#xff1b; 3.当温度低于设置下限值…

使用Redis将单机登录改为分布式登录

使用Redis将单机登录改为分布式登录 1. 背景 ​ 现在大多数的应用程序登录的方式都是必须满足分布式登录的效果&#xff0c;比如我们在一个客户端登录之后可以在另一个客户端上面共享当前用户的信息&#xff0c;这样在另一个客户端登录的时候就不用用户再次输入自己的账号密码…

昂科烧录器支持Prolific旺玖科技的电力监控芯片PL7413C1FIG

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表&#xff0c;其中Prolific旺玖科技的高度集成的电力监控芯片PL7413C1FIG已经被昂科的通用烧录平台AP8000所支持。 PL7413C1FIG是一款高度集成的电力监控芯片&#xff0c;用于测量电力使用情况的…

【C语言】13.数组指针与函数指针及其应用

一、数组指针 顾名思义&#xff0c;数组指针就是指向数组的指针。形如&#xff1a;int (*p)[10]; 注意&#xff1a;[]的优先级要高于*号的&#xff0c;所以必须加上&#xff08;&#xff09;来保证p先和*结合。 数组指针的使用 int arr[10] {0}; int (*parr)[10] &arr;…

【因果推断python】34_合成控制4

目录 进行推理 关键思想 进行推理 由于我们的样本量非常小&#xff08;39&#xff09;&#xff0c;因此在确定我们的结果是否具有统计学意义时&#xff0c;我们必须更加聪明&#xff0c;而不仅仅是由于随机运气。在这里&#xff0c;我们将使用 Fisher 精确检验的思想。它的直…

【机器学习】LightGBM: 优化机器学习的高效梯度提升决策树

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 LightGBM: 优化机器学习的高效梯度提升决策树引言一、LightGBM概览二、核心技术…

腾讯大模型最新路线图,主打一个“实用”

让大模型更接地气&#xff0c;腾讯交出一份阶段性答卷。 大模型狂奔一年多后&#xff0c;正迈向产业落地的深水区。如何用好这一革命性的新技术&#xff0c;已成为整个社会的一道必答题。 去年&#xff0c;国内大模型百花齐放&#xff0c;外界关注的焦点也集中在模型能力上。…

深入理解ReentrantLock

深入理解ReentrantLock 在Java并发编程中&#xff0c;锁&#xff08;Lock&#xff09;是控制多个线程对共享资源访问的重要工具。虽然Synchronized关键字是实现锁的常用方式&#xff0c;但它在功能上比较有限。ReentrantLock是java.util.concurrent.locks包中提供的一个更加灵…

FreeRTOS移植:STM32L476 nucleo-L476RG 开发板《02》

系列文章 FreeRTOS移植&#xff1a;STM32L476 nucleo-L476RG 开发板《01》 说明 上一篇 FreeRTOS移植&#xff1a;STM32L476 nucleo-L476RG 开发板《01》 主要讲了一下如何快速搭建一个 STM32 裸机工程&#xff0c;其实 STM32CubeMX 可以生成 FreeRTOS 的工程&#xff0c;这就…

C语言小例程20/100

题目&#xff1a;一个数如果恰好等于它的因子之和&#xff0c;这个数就称为"完数"。例如61&#xff0b;2&#xff0b;3.编程找出1000以内的所有完数。 #include<stdio.h> #define N 1000 int main() {int i,j,k,n,sum;int a[256];for(i2;i<N;i){suma[0]1;k…

异常封装类统一后端响应的数据格式

异常封装类 如何统一后端响应的数据格式 1. 背景 后端作为数据的处理和响应&#xff0c;如何才能和前端配合好&#xff0c;能够高效的完成任务&#xff0c;其中一个比较重要的点就是后端返回的数据格式。 没有统一的响应格式&#xff1a; // 第一种&#xff1a; {"dat…

水表摄像直读抄表仪

1.技术性简述 水表摄像直读抄表仪&#xff0c;是一种前沿的智能计量机器设备&#xff0c;它利用超清摄像头部和图像识别算法&#xff0c;完成了远程控制、非接触的水表载入。这一技术的普及&#xff0c;颠覆了传统式人力抄表的形式&#xff0c;提高了效率&#xff0c;降低了不…