解题报告——蓝桥 试题 基础练习 矩阵乘法——27行代码AC

储备知识:

矩阵:

矩阵的乘法:
在这里插入图片描述
也就是说,结果矩阵第m行与第n列交叉位置的那个值,等于第一个矩阵第m行与第二个矩阵第n列,对应位置的每个值的乘积之和。 矩阵的n次幂同理。不过是自己乘自己。

本题注意点:

1、矩阵是有0阶的!矩阵是有0阶的!!矩阵是有0阶的!!!(数学不好的我哭晕在厕所o(╥﹏╥)o)
类似这样:

2、还有啊,笔者想了好久,也没有更优化的方案,如果有好想法的同学,可以分享一下。不吝赐教。 Thanks♪(・ω・)ノ

代码:

#include<bits/stdc++.h>
using namespace std;
int main() {
	int n, m;			//n阶m次幂 
	cin >> n >> m;
	int a[n][n], b[n][n], c[n][n]; memset(c,0,sizeof(c));		//置0 
	for(int i = 0; i < n; i++) 									//输入 
		for(int j = 0; j < n; j++) 
			cin >> a[i][j];  b[i][j] = a[i][j];
	if(m == 0) 													//阶数为0的情况 
		for(int i = 0; i < n; i++) 
			for(int j = 0; j < n; j++) 
				i==j ? a[i][j] = 1 : a[i][j] = 0;
	m--;
	while(m-- > 0) {											//阶数不为0 
		for(int i = 0; i < n; i++) 
			for(int j = 0; j < n; j++) 
				for(int k = 0; k < n; k++) 
					c[i][j] += a[i][k]*b[k][j];
		memcpy(a,c,sizeof(c)); memset(c,0,sizeof(c));
	}
	for(int i = 0; i < n; i++) {								//输出 
		for(int j = 0; j < n; j++) 
			cout << a[i][j] << ' ';
		cout << endl; }
	return 0;
}

日拱一卒,功不唐捐。

发布了73 篇原创文章 · 获赞 61 · 访问量 4697

猜你喜欢

转载自blog.csdn.net/weixin_43899069/article/details/104613498
今日推荐