大意:构造一个n行n列的矩阵,使得每一行,每一列的异或和都相等,n是4的倍数。
先看4*4的矩阵,我们很容易构造出符合要求的矩阵,比如
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
这个矩阵每行每列的异或和都为0
对于一个n*n的矩阵,我们可以写成多个4*4的矩阵,为了保证数字不重复,可以对于其他的小矩阵都加上16,32等等
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int n; int main(){ scanf("%d",&n); int m=n/4; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ int now=((i-1)/4*m+(j-1)/4)*16; int hang=i%4,lie=j%4; if(hang==0)hang=4; if(lie==0)lie=4; printf("%d ",(hang-1)*4+lie-1+now); } puts(""); } return 0; }