算法学习1——矩阵转置
C++tip1:^符号的使用
任何数^0=任何数;相同数^=0
1)两个数交换
a=a^b;结果存2个数相同的位为0,不同的位为1
b=a^b;0表示相同,b的对应位不变,b的位与1^,1^1=0,0^1=1
a=a^b;
#include <iostream> using namespace std; int main() { int a=4; int b=6; cout << "before: a=" << a << " b=" << b <<endl; a=a^b; b=a^b; a=a^b; cout << "after: a=" << a << " b=" << b <<endl; return 0; }
2)一组数中与所有数异或都为1,则这个数只有他一个
#include <iostream> using namespace std; int main() { int arry[5]={1,2,3,4,5}; int input; cout << "Input:"; cin >> input; int i=0; bool flag=true; while(i<5) { if((arry[i]^input) == 0) { flag=false; break; } i++; } if(flag) cout << "The only one." << endl; else cout << "Not the only one." << endl; return 0; }
3)判断两个数是否相等
#include <iostream> using namespace std; int main() { int a, b; cin >> a >> b; if(a^b) cout << "a != b" << endl; else cout << "a == b" << endl; return 0; }
【华为杯】题目:
问题描述将一个N*N矩阵的行列互换要求实现函数
void MatrixTranspose (const char *InArr, unsigned int n, const char *OutArray)
【输入】InArr:
输入的字符矩阵n:N*N矩阵的行数
【输出】OutArray:转置后的字符矩阵
【返回】无。注:输入输出的矩阵都是以一维形式保存的二维数组,比如输入为{‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’}
#include <iostream> #include <cmath> using namespace std; void swap(int &a,int &b) { a ^= b; b ^= a; a ^= b; } void MatrixTrasport(int *martrix,int size) { int xy = sqrt(size); for(int i=0;i<xy;i++) for(int j=0;j<i;j++) swap(martrix[i*3+j],martrix[j*3+i]); } void output(int *martrix,int size) { for(int i=0; i<size;i++) cout << martrix[i]; cout <<endl; } int main() { int martrix[9]={1,2,3,4,5,6,7,8,9}; output(martrix,9); MatrixTrasport(martrix,9); output(martrix,9); return 0; }