Problem C: 编写函数:矩阵乘法 (Append Code)
来源:互联网 发布:整站源码带数据下载 编辑:程序博客网 时间:2024/05/18 05:17
Problem C: 编写函数:矩阵乘法 (Append Code)
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 3579 Solved: 1915
[Submit][Status][Web Board]
Description
给出一个m行n列的矩阵A和一个n行q列的矩阵B,求它们的乘积。
-----------------------------------------------------------------------------
结合“Append Code”中的代码,编写以下函数(形参中ma[][]的数组大小需自己补全):
原型:int get_matrix(int ma[][], int m, int n);
功能:遵循样例输入的格式读取一个m行n列的矩阵存储在ma[][]里。
原型:int put_matrix(int ma[][], int m, int n);
功能:按格式输出一个m行n列矩阵ma[][]的所有元素。
原型:int mul_matrix(int pr[][], int m1[][], int m2[][], int m, int n, int q);
功能:计算m行n列的矩阵m1[][]和n行q列的矩阵m2[][]的乘积pr[][]。
函数的调用格式见“Append Code”。
Input
输入分为三部分,首先输入三个正整数m,n,q,其次是一个m行n列的矩阵A,最后是一个n行q列的矩阵B,矩阵的元素均为整数。m、n、q均不超过100。
Output
输出一个m行q列的矩阵。矩阵的每行元素输出为一行,矩阵每列元素间一个用空格分开。
Sample Input
Sample Output
HINT
定义多维维数组做形参时,元素的个数要小心定义。
Append Code
append.c:
int main(){ int m, n, q; int product[MAX_SIZE][MAX_SIZE]; int matrix1[MAX_SIZE][MAX_SIZE]; int matrix2[MAX_SIZE][MAX_SIZE]; scanf("%d%d%d", &m, &n, &q); get_matrix(matrix1, m, n); get_matrix(matrix2, n, q); mul_matrix(product, matrix1, matrix2, m, n, q); put_matrix(product, m, q); return 0;}
这里进行矩阵的乘法的思路和平常线代中的计算思路并不相同,第一个矩阵的第一行的各个元素依次与第二个矩阵的每一行的各个元素依次相乘求出结果矩阵的第一行,然后依次计算;
变换的速度一共三种
1第一个矩阵的行
2第一个矩阵的列
3第二个矩阵的行
4第二个矩阵的列 !其中第一个矩阵的列的变化速度和第二个矩阵的行的变化速度相同,第一个矩阵的行变换最慢,第二个矩阵的列变化最快,列出一个三重循环的for就轻松解觉了;
码子:
#include <stdio.h>#include <string.h>#include <math.h>#include <stdlib.h>#include <ctype.h>#define MAX_SIZE 105int get_matrix(int ma[105][105], int m, int n){ int i,j,k,l; for(i=0; i<m; i++) for(j=0; j<n; j++) scanf("%d",&ma[i][j]); }int put_matrix(int ma[105][105], int m, int n){ int i,j,k,l; for(i=0; i<m; i++) { for(j=0; j<n; j++) { if(j==0) printf("%d",ma[i][j]); else printf(" %d",ma[i][j]); } printf("\n"); } }int mul_matrix(int pr[105][105], int m1[105][105], int m2[105][105], int m, int n, int q){ int i,j,k,l; for(i=0; i<m; i++) { for( j=0; j<q; j++) { pr[i][j]=0;//这里初始化就好了! for( k=0; k<n; k++) { pr[i][j]+= m1[i][k]*m2[k][j]; } } }} int main(){ int m, n, q; int product[MAX_SIZE][MAX_SIZE]; int matrix1[MAX_SIZE][MAX_SIZE]; int matrix2[MAX_SIZE][MAX_SIZE]; scanf("%d%d%d", &m, &n, &q); get_matrix(matrix1, m, n); get_matrix(matrix2, n, q); mul_matrix(product, matrix1, matrix2, m, n, q); put_matrix(product, m, q); return 0;}
- Problem C: 编写函数:矩阵乘法 (Append Code)
- 实验9 Problem C: 编写函数:字符串的复制 之一 (Append Code)
- Problem E: 编写函数:递归求逆序 (Append Code)
- 作业8 Problem G: 编写函数:Swap (I) (Append Code)
- Problem E: 编写函数:Swap (I) (Append Code)
- Problem E: 编写函数:Swap (I) (Append Code)
- Problem A: 编写函数:三个数的最大最小值 (Append Code)
- Problem A: 编写函数:三个数的最大最小值 (Append Code)
- 编写函数:日期的顺序 (Append Code)
- 编写函数:Swap (I) (Append Code)
- 实验9 问题 C: 编写函数:字符串的复制 之一 (Append Code)
- Problem D: 编写函数:String to Integer (IV) (Append Code) && 2/8/16进制到10进制的转换
- 山科大oj--编写函数:各位数字之和 (Append Code)
- 山科大oj--编写函数:各位数字之和 (Append Code)
- 编写函数:三个数的最大最小值 (Append Code)
- code vs 1287 矩阵乘法
- CODE[VS] 1287 矩阵乘法
- 山科大 oj 编写函数:清除字符串首尾的空白符 (Append Code)
- Maven 插件配置,安装配置问题
- R-FCN、SSD、YOLO2、faster-rcnn和labelImg实验笔记
- 在PAT刷题过程的一些经验
- CSS3实现关闭按钮
- 文章标题
- Problem C: 编写函数:矩阵乘法 (Append Code)
- 获取指定文件/目录命令
- 第14周 拓展练习(二)成绩处理函数版
- 观察者模式
- Codeforces 713C C. Sonya and Problem Wihtout a Legend (经典DP)
- 微服务化改造系列之四:授权中心
- hibernate批量处理
- android:TimePicker仿照IOS时间选择器,可自定义选择器
- AOP的实现的几种方式