正题
题目链接:http://poj.org/problem?id=2083
大意
图形:
一级:
XX
二级:
XX
X XXX
三级:
X X X XXXXX
X X XX
X X X XXXXX
X X XX
X X
X X XX
X X X XXXXX
X X XX
X X X XXXXX
然后以此类推
解题思路
我们可以发现每一级的左上角和上一级一样,所以可以用一个递归处理好7级的图形,然后每次根据输入输出一部分。
code
#include<cstdio>
using namespace std;
char map[731][731];
int n,f[8];
void dg(int n,int x,int y)//递归
{if (n==0) map[x][y]='X';//写入else{dg(n-1,x,y);dg(n-1,x+f[n-1]*2,y);dg(n-1,x,y+f[n-1]*2);dg(n-1,x+f[n-1],y+f[n-1]);dg(n-1,x+f[n-1]*2,y+f[n-1]*2);//绘制}
}
int main()
{f[0]=1;for (int i=1;i<=7;i++)f[i]=f[i-1]*3;dg(6,0,0);//初始图形while(1){scanf("%d",&n);if(n==-1) return 0;n-=1;for (int i=0;i<f[n];i++){for (int j=0;j<f[n];j++)if (map[i][j]==map[730][730]) printf(" ");//特别判断,字符数组初始空格不是正常空格else printf("%c",map[i][j]);//输出printf("\n");}printf("-\n");}
}