基础算法题——矩阵乘法(异或和)
前言
本人为一名普通二本学校自动化专业的大二学生,对编程有着少许兴趣。
写这道题主要目的为了分享自己的学习经验。
题目
本题考查重点
①:异或和理解
②:矩阵乘法与计算
一开始粗略看了下题目,发现自己竟然看不懂题目意思。
关键不理解何为异或和以及如何求出所有元素的异或和。
于是我在网上查阅了一些资料,其实异或和很简单。
异或和:没有进制的二进制加法。
假设求5⊕3 :
5二进制 101
3二进制 011
异 或 和 110
回到题目里就是将每个元素进行异或和
那如何进行异或和会更简便呢?
我们可以先创一个sum=0的变量,将sum与元素求异或并保存数据于自身sum中,接着让下一个元素对sum求异或…最终sum为全部元素的异或和。
(ps:在做这道题的时候,我忘记能够直接输入十六进制%x保存数据,又要字符串又要新的矩阵弄得很是麻烦。。。希望这次能长点记性吧)
最后附上代码:
//求异或和——没有进制的二进制加法
#include<bits/stdc++.h>
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;
}
希望能够将自己的一些学习经验分享给有需要的人。
我是小郑,一个坚持不懈的小白,我们下次见。