标签:style blog http java color 数据
MATLAB大法好,天灭C++,退C保平安,人在做,天在看,大段循环留祸患,内存泄露电脑灭,跳出递归保平安。诚心诚念矩阵好,批量操作平安保,两行代码问题解,算法查错有保障。众生都是码农命,老板PUSH忘前缘。MATLAB弟子说真相,教你脱险莫拒绝,上网搜索九评Bjarne Stroustrup,有*真*相。
大家都知道,用MATLAB做矩阵计算是非常方便的。比如你想算矩阵A的转置AT(即将A矩阵行列对调,元素aij变为aji),只需敲A’ 即可,而在C或C++中,你必须写循环或者——什么都不用做!再比如你想对A中的每个元素都加1,在MATLAB中可以轻松地写作A.+1,而在C或C++中,你照样要写循环。
现在定义一个矩阵运算:
如果A是一个 m × n 的矩阵,而B是一个 p × q 的矩阵,那么则是一个 mp × nq 的矩阵:
现给出矩阵A、B,求(AB)((AT).+1(BT).+1)。其中,前两个括号之间表示正常的矩阵乘法,的运算优先级最低。
第一行为数据组数t(t<=10)。
接下来,对每组数据:
第一行为4个整数m,n,p,q,1<=m,n,p,q<=50,分别代表矩阵A、B的行、列数。接下来为按照行列的2个矩阵A,B。矩阵元素为大小不超过100的非负整数。
按照行列顺序输出结果矩阵,行内元素之间由空格隔开,行末无空格。
2 1 1 1 1 1 1 1 2 2 2 1 0 1 2 0 1
4 16 10 6 4
#include<stdio.h> #define N 55 #define M 2550 typedef long long LL; LL a[N][N], b[N][N], A[N][N], B[N][N]; LL ans[M][M]; int main() { int t, m, n, p, q, i, j; scanf("%d",&t); while(t--) { scanf("%d%d%d%d",&m,&n,&p,&q); for(i = 0; i < m; i++) for(j = 0; j < n; j++) scanf("%lld", &a[i][j]); for(i = 0; i < p; i++) for(j = 0; j < q; j++) scanf("%lld", &b[i][j]); for(i = 0; i < m; i++) for(j = 0; j < m; j++) { A[i][j] = 0; for(int x = 0; x < n; x++) A[i][j] += a[i][x] * (a[j][x] + 1); } for(i = 0; i < p; i++) for(j = 0; j < p; j++) { B[i][j] = 0; for(int x = 0; x < q; x++) B[i][j] += b[i][x] * (b[j][x]+1); } for(i = 0; i < m*p; i++) for(j = 0; j < m*p; j++) { int x = i / p; int y = j / p; int yy = j % p; int xx = i % p; ans[i][j] = A[x][y] * B[xx][yy]; } for(i = 0; i < m * p; i++) { for(j = 0; j < m*p - 1; j++) printf("%lld ",ans[i][j]); printf("%lld\n",ans[i][j]); } } return 0; }
BNU 34974 MATLAB大法好,码迷,mamicode.com
标签:style blog http java color 数据
原文地址:http://blog.csdn.net/lyhvoyage/article/details/24767613