这是一套找规律算法题。
理解一波题意:将2^n * 2^n的图,每次按田之划分,左上角为安全区,其他三部分,按前面方法划分,直到长度为1,停下来。安全区标记0,处罚区标记1.
n=2

n=3
看图发现,每个位置的值是正上方和右上方值异或。
(第一行没有上一行,可是我们发现,每个第一行的最后一个都是1,也就是安全区)
因此,我们只需将(1,n)设置成1;但是呢,为了
a[i][j] = a[i-1][j]^a[i-1][j+1];
该算法成立,我就设置第0行的n+1个为1,这就可以保证后面的值不会出现偏差。【仔细想想,有点杨辉三角的感觉】
#include<bits/stdc++.h>
using namespace std;
int a[1026][1026]={0};
int main()
{
int n;
cin >> n;
n = 1<<n;
a[0][n+1]=1;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n;j++){
a[i][j] = a[i-1][j]^a[i-1][j+1];
cout << a[i][j] <<" ";
}
cout << '\n';
}
return 0;
}
版权声明:本文为weixin_44271578原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。