POJ2083分形图

题目地址:http://poj.org/problem?id=2083

思路:由图形可以得到规律

n=1时 图形大小为1*1  = 3^0 * 3^0

n=2时 图形大小为3*3 = 3^1 * 3^1

所以图形大小为3^(n-1)*3^(n-1)

由于题目最大n=7 所以用730*730的字符数组存放

n==1    X

n==2  X X

            X

          X X

代码思路的话,就是用一个起点向5个方向递归,知道n==1时

例如n==2时 以1,1位置当左上角 对1,1 1,3 2,2 3,1 3,3 五个方向进行递归

即左上 右上 中间 左下 右下五个方向

代码如下:

#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
using namespace std;
int n;
char map[730][730];
void f(int n,int x,int y){
    if(n==1){
        map[x][y] = 'X' ;
        return;
    }
    int size = pow(3*1.0, n-2);
    f(n-1,x,y);  //左上角
    f(n-1,x,y+2*size); //右上角
    f(n-1,x+size,y+size); //中间 
    f(n-1,x+2*size,y); //左下角
    f(n-1,x+2*size,y+2*size); //右下角
}
int main()
{
    while(cin>>n){
    if(n==-1)
        break;
    memset(map,' ',sizeof(map));
    int size = pow(3*1.0,n-1);
    f(n,1,1);
    for(int i=1;i<=size;i++){
        for(int j=1;j<=size;j++){
            cout<<map[i][j];
        }
        cout<<endl;
    }
    cout<<"-"<<endl;
}
    return 0;
}
 

猜你喜欢

转载自blog.csdn.net/xiaoguapi99/article/details/86763297