题意:给出m,要求用1和-1构造一个m* m的矩阵,满足任意两行的内积为0,其中m的取值为2^k(k为1,2…10)。
思路:按这个构造方法一直构造下去。
#include<bits/stdc++.h>
using namespace std;
int arr[1050][1050], n;
int main() {
arr[1][1] = 1;
arr[1][2] = 1;
arr[2][1] = 1;
arr[2][2] = -1;
scanf("%d", &n);
for(int k = 2; k < n; k <<= 1)
for(int i = 1; i <= k; i++)
for(int j = 1; j <= k; j++) {
arr[i + k][j] = arr[i][j + k] = arr[i][j];
arr[i + k][j + k] = -arr[i][j];
}
for(int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
printf("%d%c", arr[i][j], j == n ? '\n' : ' ');
return 0;
}