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列的元素可表示为公式( ...
随机推荐
- 编程微语 2019-Autumn
很多时候我们要的是[网页全屏],可是许多软件却做成了[浏览器全屏],不要一听到[全屏]就认为真的是传统意义上的全屏.拜托,老板(往往就是最大的产品经理).产品经理.程序员,想想,说清楚,做正确.某度文 ...
- RethinkDB是什么?—— 面向文档的NOSQL数据库,MVCC+Btree索引,pushes JSON to your apps in realtime采用push思路,优化的ssd存储
RethinkDB是什么? RethinkDB是新一代的面向文档的数据库存储管理系统,原本是MySQL中针对SSD优化的一个存储引擎,后来脱离了MySQL成为了独立的系统. 数据如何存储在磁盘上? 数 ...
- 深入理解JVM虚拟机7:JNDI,OSGI,Tomcat类加载器实现
打破双亲委派模型 JNDI JNDI 的理解 JNDI是 Java 命名与文件夹接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之中的一 ...
- legend3---19、要更多的从服务器端控制元素的显示和隐藏,而不要是页面端
legend3---19.要更多的从服务器端控制元素的显示和隐藏,而不要是页面端 一.总结 一句话总结: 这样可以控制很多页面端的非法操作 1.html标签中data方式的数据,修改之后在标签上只显示 ...
- Pandas的Categorical Data
http://liao.cpython.org/pandas15/ Docs » Pandas的Categorical Data类型 15. Pandas的Categorical Data panda ...
- 梯度下降法(BGD & SGD & Mini-batch SGD)
梯度下降法(Gradient Descent) 优化思想:用当前位置的负梯度方向作为搜索方向,亦即为当前位置下降最快的方向,也称“最速下降法”.越接近目标值时,步长越小,下降越慢. 如下图所示,梯度下 ...
- Linux中强大的top命令
top命令算是最直观.好用的查看服务器负载的命令了.它实时动态刷新显示服务器状态信息,且可以通过交互式命令自定义显示内容,非常强大. 在终端中输入top,回车后会显示如下内容: top - 21: ...
- docker pull 失败: server misbehaving
在docker pull 镜像时一直报错: Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lo ...
- Swift_IOS之提示框UIAlertController
import UIKit class ViewController: UIViewController ,UIActionSheetDelegate{ @IBAction func btn1(_ se ...
- Delphi 中记录类型 给记录指针赋值
PPersion=^TPersion; TPersion=packed record Name:string; Sex:string; Clasee:string; end; var persion: ...