L1-048. 矩阵A乘以B
时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
陈越
给定两个矩阵A和B,要求你计算它们的乘积矩阵AB。需要注意的是,只有规模匹配的矩阵才可以相乘。即若A有Ra行、Ca列,B有Rb行、Cb列,则只有Ca与Rb相等时,两个矩阵才能相乘。
输入格式:
输入先后给出两个矩阵A和B。对于每个矩阵,首先在一行中给出其行数R和列数C,随后R行,每行给出C个整数,以1个空格分隔,且行首尾没有多余的空格。输入保证两个矩阵的R和C都是正数,并且所有整数的绝对值不超过100。
输出格式:
若输入的两个矩阵的规模是匹配的,则按照输入的格式输出乘积矩阵AB,否则输出“Error: Ca != Rb”,其中Ca是A的列数,Rb是B的行数。
输入样例1:2 3 1 2 3 4 5 6 3 4 7 8 9 0 -1 -2 -3 -4 5 6 7 8输出样例1:
2 4 20 22 24 16 53 58 63 28输入样例2:
3 2 38 26 43 -5 0 17 3 2 -11 57 99 68 81 72输出样例2:
Error: 2 != 3
记得把有几行几列输出
#include <stdio.h>#include <string.h> #include <stdlib.h> int main() { //freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout); int Ra, Ca, Rb, Cb; int i, j, k, count = 0; int **mat1, **mat2; //A矩阵 scanf("%d%d", &Ra, &Ca); mat1 = (int**)malloc(sizeof(int*)*Ra); for (i = 0; i < Ra; i++) mat1[i] = (int*)malloc(sizeof(int)*Ca); for (i = 0; i < Ra; i++) for (j = 0; j < Ca; j++) scanf("%d", &mat1[i][j]); //判断规模 scanf("%d%d", &Rb, &Cb); if (Ca != Rb) { printf("Error: %d != %d\n", Ca, Rb); return 0; } //B矩阵 mat2 = (int**)malloc(sizeof(int*)*Rb); for (i = 0; i < Rb; i++) mat2[i] = (int*)malloc(sizeof(int)*Cb); for (i = 0; i < Rb; i++) for (j = 0; j < Cb; j++) scanf("%d",&mat2[i][j]); printf("%d %d\n", Ra, Cb); //相乘求和 for (i = 0; i < Ra; i++) { for (j = 0; j < Cb; j++) { for (k = 0; k < Ca; k++) count += mat1[i][k] * mat2[k][j]; if (j == 0) printf("%d", count); else printf(" %d", count); count = 0; } printf("\n"); } return 0; }