题意:输入k,对应给定的2^k空间,求一组正交向量组。
思路:
每次左上角=右上角=左下角,右下角=反左上角
CODE:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=2000;
char mp[maxn][maxn];
void init()
{
mp[1][1]=mp[1][2]=mp[2][1]='+',mp[2][2]='*';
for(int k=2;k<=9;k++)
{
ll t=pow(2,k-1);
ll t1=pow(2,k);
for(int i=1;i<=t;i++)
for(int j=t+1;j<=t1;j++)
mp[i][j]=mp[i][j-t];
for(int i=t+1;i<=t1;i++)
for(int j=1;j<=t;j++)
mp[i][j]=mp[i-t][j];
for(int i=t+1;i<=t1;i++)
{
for(int j=t+1;j<=t1;j++)
{
if(mp[i-t][j-t]=='+')
mp[i][j]='*';
else
mp[i][j]='+';
}
}
}
}
int main(void)
{
init();
/*for(int i=1;i<=8;i++)
{
for(int j=1;j<=8;j++)
{
printf("%c",mp[i][j]);
if(j==4) printf(" ");
}
puts("");
if(i==4) printf("\n");
}*/
int n;
cin >> n;
ll x=pow(2,n);
for(int i=1;i<=x;i++)
{
for(int j=1;j<=x;j++)
{
printf("%c",mp[i][j]);
}
puts("");
}
}