牛客网题库——矩阵乘法(异或和)

基础算法题——矩阵乘法(异或和)

前言

本人为一名普通二本学校自动化专业的大二学生,对编程有着少许兴趣。
写这道题主要目的为了分享自己的学习经验。

题目

牛客网题库——矩阵乘法(异或和)_第1张图片
备注

本题考查重点

①:异或和理解
②:矩阵乘法与计算
一开始粗略看了下题目,发现自己竟然看不懂题目意思。
关键不理解何为异或和以及如何求出所有元素的异或和
于是我在网上查阅了一些资料,其实异或和很简单。

异或和:没有进制的二进制加法。

假设求5⊕3 :
5二进制 101
3二进制 011
异 或 和 110
回到题目里就是将每个元素进行异或和
那如何进行异或和会更简便呢?
我们可以先创一个sum=0的变量,将sum与元素求异或并保存数据于自身sum中,接着让下一个元素对sum求异或…最终sum为全部元素的异或和。
(ps:在做这道题的时候,我忘记能够直接输入十六进制%x保存数据,又要字符串又要新的矩阵弄得很是麻烦。。。希望这次能长点记性吧)
最后附上代码:

//求异或和——没有进制的二进制加法 
#include
using namespace std;
int A[5000][70], C[64][5000]; 
//防止数组溢出 
int main()
{
	int N, P, M, i, j, k, s=0;
	cin>>N>>P>>M; 
	char ch;
	
	//输入两个矩阵 
	for(i=0; i<N; i++)
	for(j=0; j<P; j++)
	scanf("%x", &A[i][j]);//16进制输入%x 
	
	for(i=0; i<M; i++)
	for(j=0; j<P; j++)
	{
		cin>>ch;
		C[j][i]=ch-'0';
	}   	
	
	for(i=0; i<N; i++)
	for(j=0; j<M; j++)
	{
		int x=0;
		for(k=0; k<P; k++)
		{
			x+=A[i][k]*C[k][j];
		}
		s^=x;//求异或和
			 //一开始直接拿0去与数据求异或 
	}
	cout<<s<<endl;
	return 0;
}

希望能够将自己的一些学习经验分享给有需要的人。
我是小郑,一个坚持不懈的小白,我们下次见。

你可能感兴趣的:(基础算法题)