1232: 矩阵乘法

Time Limit: 1 Sec Memory Limit: 128 MB 64bit IO Format: %lld

Description

小明明正在学习线性代数,老师布置了好多矩阵相乘的题目,手算累死了。最近刚学习了c语言,小明明灵机一动,决定让小伙伴帮他编一个程序用来计算矩阵相乘。亲爱的小伙伴们,不要让小明明童鞋失望哦哟嚯嚯嚯嚯v

Input

首先输入一个n,然后n个数据块。

每个数据块先给3个正整数N,M,P(N,M,P均不大于13)。

然后给一个NM的矩阵A,再接着给一个MP的矩阵B。

矩阵A和B的元素都是一个不大于37的非负整数。

详情请见sample。

Output

输出n个矩阵,分别表示A*B的结果。注意以%6d的格式输出,行末不能有空格。每个矩阵输出后再输出一个空行,具体见sample

Sample Input

2
2 3 2
1 2 3
4 5 6
1 2
1 2
1 2 1 2 3
1 2
1 2 3
4 5 6

Sample Output

     6    12
15 30 9 12 15

HINT

注意格式:每个数字宽度为6,即%6d的格式输出每个数字,每行末尾不能有多余的空格。

每个矩阵输出后再输出一个空行以示分隔。看清样例。

代码

原理比较简单,不单独分析,看注释就可以。

网页评判是404ms,但我看到了不到200ms的大神,如果愿意分享代码,在此感谢。可以评论附上关键代码或者邮箱1

// wustoj ac 404ms
#include<stdio.h>
#include<string.h> #define MAX 14 // 矩阵最大为13*13的 int main()
{
// A[N][M], B[M][P]
int n, N, M, P, i, j, k;
int matrixA[MAX][MAX], matrixB[MAX][MAX], matrixAns[MAX][MAX]; scanf("%d", &n); // 输入数据组数
while (n--)
{
scanf("%d%d%d", &N, &M, &P);
// 输入A矩阵
for (i = 0; i < N; i++)
{
for (j = 0; j < M; j++)
{
scanf("%d", &matrixA[i][j]);
}
}
// 输入B矩阵
for (i = 0; i < M; i++)
{
for (j = 0; j < P; j++)
{
scanf("%d", &matrixB[i][j]);
}
}
// 重置为0
memset(matrixAns, 0, sizeof(matrixAns));
// 计算乘法
for (i = 0; i < P; i++)
{
for (j = 0; j < M; j++)
{
for (k = 0; k < N; k++)
{
matrixAns[k][i] += matrixA[k][j] * matrixB[j][i];
}
}
}
// 输出结果
for (i = 0; i < N; i++)
{
for (j = 0; j < P; j++)
{
printf("%6d", matrixAns[i][j]);
}
printf("\n");
}
// 每组数据空一行
printf("\n");
}
return 0;
}

Java版(提交超时,暂未解决,希望有人指点)

代码在Eclipse运行结果正确,OJ提交一直超时(Time Limit Exceed)

import java.util.Scanner;

public class Main {

	public Main() {
Scanner sc = new Scanner(System.in);
int n;
// 输入数据组数
n = sc.nextInt();
while(n > 0) {
// 输入矩阵大小
int N, M, P;
N = sc.nextInt();
M = sc.nextInt();
P = sc.nextInt();
// 申请空间
int[][] matrixA = new int[N][M];
int[][] matrixB = new int[M][P];
// 输入矩阵A
for(int i = 0; i < N; i++) {
for(int j = 0; j < M; j++) {
matrixA[i][j] = sc.nextInt();
}
}
// 输入矩阵B
for(int i = 0; i < M; i++) {
for(int j = 0; j < P; j++) {
matrixB[i][j] = sc.nextInt();
}
}
// 申请保存结果的数组
int[][] matrixAns = new int[N][P];
// 计算乘法
for(int i = 0; i < N; i++) {
for(int j = 0; j < P; j++) {
for(int k = 0; k < M; k++) {
matrixAns[i][j] += matrixA[i][k] * matrixB[k][j];
}
}
}
// 输出结果
for(int i = 0; i < N; i++) {
for(int j = 0; j < P; j++) {
System.out.printf("%6d", matrixAns[i][j]);
}
System.out.println();
}
// 每组数据空一行
System.out.println();
n--;
}
sc.close();
} public static void main(String[] args) {
new Main();
} }

【End】


  1. QQ邮箱:929450073@qq.com ↩︎

WUSTOJ 1232: 矩阵乘法(C)的更多相关文章

  1. *HDU2254 矩阵乘法

    奥运 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submissi ...

  2. *HDU 1757 矩阵乘法

    A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  3. CH Round #30 摆花[矩阵乘法]

    摆花 CH Round #30 - 清明欢乐赛 背景及描述 艺术馆门前将摆出许多花,一共有n个位置排成一排,每个位置可以摆花也可以不摆花.有些花如果摆在相邻的位置(隔着一个空的位置不算相邻),就不好看 ...

  4. POJ3070 Fibonacci[矩阵乘法]

    Fibonacci Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13677   Accepted: 9697 Descri ...

  5. bzoj 2738 矩阵乘法

    其实这题跟矩阵乘法没有任何卵关系,直接整体二分,用二维树状数组维护(刚刚学会>_<),复杂度好像有点爆炸(好像有十几亿不知道是不是算错了),但我们不能怂啊23333. #include&l ...

  6. 【BZOJ-2476】战场的数目 矩阵乘法 + 递推

    2476: 战场的数目 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 58  Solved: 38[Submit][Status][Discuss] D ...

  7. 【BZOJ-1898】Swamp 沼泽鳄鱼 矩阵乘法

    1898: [Zjoi2005]Swamp 沼泽鳄鱼 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1012  Solved: 566[Submit][S ...

  8. 【Codeforces718C】Sasha and Array 线段树 + 矩阵乘法

    C. Sasha and Array time limit per test:5 seconds memory limit per test:256 megabytes input:standard ...

  9. 矩阵乘法的MapReduce实现

    对于任意矩阵M和N,若矩阵M的列数等于矩阵N的行数,则记M和N的乘积为P=M*N,其中mik 记做矩阵M的第i行和第k列,nkj记做矩阵N的第k行和第j列,则矩阵P中,第i行第j列的元素可表示为公式( ...

随机推荐

  1. JAVA基础知识|synchronized和lock

    一.synchronized 是jvm的一个关键字,使用过程均由jvm控制 有三种使用方式: 修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁 修饰代码块,同方法 修饰静态方法,作用 ...

  2. ArcGIS超级工具1.6升级说明

    ArcGIS超级工具1.6升级说明:多了:7个工具,总82工具,只支持ArcGIS10.2以上的版本 1.6 Excel转点支持Excel的xls和xlsx,自动识别工作表和字段名,生成点 5.6 M ...

  3. Webpack中的sourcemap以及如何在生产和开发环境中合理的设置

    一 . 从Sourcemap和Data URL说起 (1)什么是Sourcemap? 我们在打包中,将开发环境中源代码经过压缩,去空格,babel编译转化,最终可以得到适用于生产环境的项目代码,这样处 ...

  4. 设备树中指定的中断触发方式与request_irq中指定的触发方式不一致时,内核会使用哪种中断触发方式呢?

    答:会使用request_irq中指定的触发方式

  5. 怎么用群晖webdav实现外网映射网络驱动器

    前几天刚作好群晖nas局域网内的磁盘映射功能,今天老板又想实现在家里也能跟在公司一样的方便访问映射功能,因为使用网页操作实在太麻烦了.这可怎么办官方提供的 Assistant工具只能操作局域网的,又没 ...

  6. 阶段5 3.微服务项目【学成在线】_day17 用户认证 Zuul_07-用户认证-认证服务查询数据库-解析申请令牌错误信息

    1.2.5.4 解析申请令牌错误信息 当账号输入错误应该返回用户不存在的信息,当密码错误要返回用户名或密码错误信息,业务流程图如下: 修改申请令牌的程序解析返回的错误: 由于restTemplate收 ...

  7. 源码安装LNMP

    需要准备的安装包以及下载地址(只是一个大概地址,版本和下载方式需要自行选择): Nginx http://nginx.org/en/download.html nginx主程序包 MySQL http ...

  8. python之json处理

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition - Decembe ...

  9. thymeleaf中switch case多出一个空行

    以下是<thymeleaf3.0.5中文参考手册.pdf>中的代码,官方代码没有具体去查询. <div th:switch="${user.role}"> ...

  10. Java解压tar.Z文件(使用Apache Commons-compress)

    这里使用apache commons compress对.tar.Z格式文件进行解压. 对于一个文件test.tar.Z,我们可以将解压过程理解为: 将test.tar.Z解压为test.tar: 将 ...