WUSTOJ 1232: 矩阵乘法(C)
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】
- QQ邮箱:929450073@qq.com ↩︎ 
WUSTOJ 1232: 矩阵乘法(C)的更多相关文章
- *HDU2254 矩阵乘法
		奥运 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submissi ... 
- *HDU 1757 矩阵乘法
		A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ... 
- CH Round #30 摆花[矩阵乘法]
		摆花 CH Round #30 - 清明欢乐赛 背景及描述 艺术馆门前将摆出许多花,一共有n个位置排成一排,每个位置可以摆花也可以不摆花.有些花如果摆在相邻的位置(隔着一个空的位置不算相邻),就不好看 ... 
- POJ3070 Fibonacci[矩阵乘法]
		Fibonacci Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13677 Accepted: 9697 Descri ... 
- bzoj 2738 矩阵乘法
		其实这题跟矩阵乘法没有任何卵关系,直接整体二分,用二维树状数组维护(刚刚学会>_<),复杂度好像有点爆炸(好像有十几亿不知道是不是算错了),但我们不能怂啊23333. #include&l ... 
- 【BZOJ-2476】战场的数目     矩阵乘法 + 递推
		2476: 战场的数目 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 58 Solved: 38[Submit][Status][Discuss] D ... 
- 【BZOJ-1898】Swamp 沼泽鳄鱼     矩阵乘法
		1898: [Zjoi2005]Swamp 沼泽鳄鱼 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1012 Solved: 566[Submit][S ... 
- 【Codeforces718C】Sasha and Array     线段树 + 矩阵乘法
		C. Sasha and Array time limit per test:5 seconds memory limit per test:256 megabytes input:standard ... 
- 矩阵乘法的MapReduce实现
		对于任意矩阵M和N,若矩阵M的列数等于矩阵N的行数,则记M和N的乘积为P=M*N,其中mik 记做矩阵M的第i行和第k列,nkj记做矩阵N的第k行和第j列,则矩阵P中,第i行第j列的元素可表示为公式( ... 
随机推荐
- vue要注意的小知识
			心灵的鸡汤 https://www.zhangxinxu.com/wordpress/2017/06/ten-question-about-frontend-zhihu/ 1.第三方的js文件只能放在 ... 
- TCP/IP 这猝不及防的爱情
			前言 前几天看了老刘的一篇文章,TCP/IP 大明邮差.正好最近也在读<计算机自顶向下>一书 心血来潮,想写一个女版的TCP/IP 正文 一天,我正在百花会上赏花,赏着赏着,就出现了一个令 ... 
- 深入理解JVM虚拟机1:JVM内存的结构与永久代的消失
			所有的Java开发人员可能会遇到这样的困惑?我该为堆内存设置多大空间呢?OutOfMemoryError的异常到底涉及到运行时数据的哪块区域?该怎么解决呢?其实如果你经常解决服务器性能问题,那么这些问 ... 
- pc电源cpu插座和显卡插座
			cpu插座是8口的,一般4+4 显卡插座是6口的,也有8口的用6+2 6+2的中2有一个小边,组合成8口也不能插入cpu插座. 
- Linux堆的一些基础知识
			目录 堆的概述 什么是堆 堆的基本操作 堆操作背后的系统调用 堆的相关数据结构 微观结构 malloc_chuck chunk相关宏 bin 宏观结构 arena heap_info malloc_s ... 
- ML_Review_PCA(Ch4)
			Note sth about PCA(Principal Component Analysis) ML6月20日就要考试了,准备日更博客,来记录复习一下这次ML课所学习的一些方法. 博客是在参考老 ... 
- Linux 连接memcache 拒绝连接,防火墙关闭,selinux disabled 仍然不行,最后在外站找到原因,为服务器添加memcache访问权限
			最后啊,不行,直接装memcached https://www.runoob.com/memcached/memcached-install.html 附上连接:https://www.presta ... 
- css 文本省略号设置
			本文推荐2种方法. 1. css tip:只兼容chrome内核的浏览器.ff不支持. .box { overflow: hidden; /* 溢出时不显示溢出的内容 */ text-overflow ... 
- React 高阶组件浅析
			高阶组件的这种写法的诞生来自于社区的实践,目的是解决一些交叉问题(Cross-Cutting Concerns).而最早时候 React 官方给出的解决方案是使用 mixin .而 React 也在官 ... 
- Python 中的 -> 是什么意思
			函数标注通常用于 类型提示:例如以下函数预期接受两个 int 参数并预期返回一个 int 值:```def sum_two_numbers(a: int, b: int) -> int:retu ... 
