题意不说了,还算简单;
当时拿到这题的时候就感觉行与行之间可以随便交换。。然后就开始找规律了;
当n=1时;
++
+-
当n=2时;可以改下样例
++++
+-+-
++–
+–+
n=34567;
发现可以通过就n情况向右移复制一次,向下复制一次;左下方向就+变为-,-变为+;复制过去,就能得到n+1;
坑点就是n=0明明不符合题意,以为直接换行就行结果wa了一次;
输出个+号就对了
#include <cstdio>
#include <iostream>
#include <string>
#include <cstring>
#include <vector>
#include <map>
using namespace std;
char arr[666][666];
int q[11]={1,2,4,8,16,32,64,128,256,512};
int n;
void lalala()
{
arr[1][1]='+',arr[1][2]='+',arr[2][1]='+',arr[2][2]='*';
for(int k=1;k<9;k++)
{
for(int i=1+q[k]; i<=q[k+1]; i++)//zuoxia;
for(int j=1; j<=q[k]; j++)
arr[i][j]=arr[i-q[k]][j];
for(int i=1; i<=q[k]; i++)//youshang
for(int j=1+q[k]; j<=q[k+1]; j++)
arr[i][j]=arr[i][j-q[k]];
for(int i=1+q[k]; i<=q[k+1]; i++)//youxia
{
for(int j=1+q[k]; j<=q[k+1]; j++)
{
if(arr[i-q[k]][j-q[k]]=='+')
arr[i][j]='*';
if(arr[i-q[k]][j-q[k]]=='*')
arr[i][j]='+';
}
}
}
}
int main()
{
scanf("%d",&n);
lalala();
if(n==0)
printf("+\n");
else
{
for(int i=1;i<=q[n];i++)
{
for(int j=1;j<=q[n];j++)
{
cout<<arr[i][j];
}
printf("\n");
}
}
}