编写程序,求n×m和m×k矩阵之积。
只有1组数据。
第1行是2个整数n和m(1 第n+2行是2个整数m和k(1 输出 2个矩阵的乘积。 样例输入 2 3 1 2 3 4 5 6 3 2 1 2 3 4 5 6 样例输出 22 28 49 64 分析 矩阵相乘的原理就是a数组的行乘以b数组的列,然后根据这个原理设计算法,使用3个for循环即可实现 代码 # include # include //矩阵相乘void div1(int n, int m, int k, int a[10][10], int b[10][10]) { int i, j, p; int sum = 0; int c[10][10] = { 0 }; for (i = 0; i < n; i++) { for (j = 0; j < k; j++) { sum = a[i][0] * b[0][j]; for (p = 1; p < m; p++) { sum += a[i][p] * b[p][j]; } c[i][j] = sum; } } for (i = 0; i < n; i++) { for (j = 0; j < k; j++) { printf("%d ", c[i][j]); } printf("\n"); } } int main(){ int m, n, k,i,j; int a[10][10], b[10][10]; scanf("%d%d", &n, &m); for (i = 0; i < n; i++) { for (j = 0; j < m; j++) { scanf("%d", &a[i][j]); } } scanf("%d%d", &m, &k); for (i = 0; i < m; i++) { for (j = 0; j < k; j++) { scanf("%d", &b[i][j]); } } div1(n, m, k, a, b); return 0;}
第n+2行是2个整数m和k(1 输出 2个矩阵的乘积。 样例输入 2 3 1 2 3 4 5 6 3 2 1 2 3 4 5 6 样例输出 22 28 49 64 分析 矩阵相乘的原理就是a数组的行乘以b数组的列,然后根据这个原理设计算法,使用3个for循环即可实现 代码 # include # include //矩阵相乘void div1(int n, int m, int k, int a[10][10], int b[10][10]) { int i, j, p; int sum = 0; int c[10][10] = { 0 }; for (i = 0; i < n; i++) { for (j = 0; j < k; j++) { sum = a[i][0] * b[0][j]; for (p = 1; p < m; p++) { sum += a[i][p] * b[p][j]; } c[i][j] = sum; } } for (i = 0; i < n; i++) { for (j = 0; j < k; j++) { printf("%d ", c[i][j]); } printf("\n"); } } int main(){ int m, n, k,i,j; int a[10][10], b[10][10]; scanf("%d%d", &n, &m); for (i = 0; i < n; i++) { for (j = 0; j < m; j++) { scanf("%d", &a[i][j]); } } scanf("%d%d", &m, &k); for (i = 0; i < m; i++) { for (j = 0; j < k; j++) { scanf("%d", &b[i][j]); } } div1(n, m, k, a, b); return 0;}
2个矩阵的乘积。
样例输入
2 3 1 2 3 4 5 6 3 2 1 2 3 4 5 6
样例输出
22 28 49 64
分析
矩阵相乘的原理就是a数组的行乘以b数组的列,然后根据这个原理设计算法,使用3个for循环即可实现
代码
# include # include //矩阵相乘void div1(int n, int m, int k, int a[10][10], int b[10][10]) { int i, j, p; int sum = 0; int c[10][10] = { 0 }; for (i = 0; i < n; i++) { for (j = 0; j < k; j++) { sum = a[i][0] * b[0][j]; for (p = 1; p < m; p++) { sum += a[i][p] * b[p][j]; } c[i][j] = sum; } } for (i = 0; i < n; i++) { for (j = 0; j < k; j++) { printf("%d ", c[i][j]); } printf("\n"); } } int main(){ int m, n, k,i,j; int a[10][10], b[10][10]; scanf("%d%d", &n, &m); for (i = 0; i < n; i++) { for (j = 0; j < m; j++) { scanf("%d", &a[i][j]); } } scanf("%d%d", &m, &k); for (i = 0; i < m; i++) { for (j = 0; j < k; j++) { scanf("%d", &b[i][j]); } } div1(n, m, k, a, b); return 0;}
京公网安备 11010502049817号