传说中的 X

实验任务

小菇凉和小光头从老鼠那儿离开后接着往前走,在森林的角落石壁上发现了一个奇怪的“X”标记。在标记的边上有这么一段话:传说中的 X 蕴含古老的力量,真正了解“X”意义的人才能得到这种力量,而了解“X”的方式就是画“X”,不断的画“X”,规则如下:
1:
X
2:
X X
X
X X
.
.
.
这里写图片描述
以此类推(你们一定看懂了!嗯!>_<。。。
小菇凉和小光头希望解开“X”的秘密得到这股神秘的力量去打败大魔王,你能帮帮他们么?

数据输入

输入有多组数据,每组一个数字 n,代表输出含有 n 个层次的 X 图形(n<=7,当 n=-1结束)

数据输出

输出对应图形,每组输出后输出一个“-”

输入示例

1
2
3
4
-1

输出示例

引用块内容

解题思路

同样是DFS的应用。
一开始根本没有往DFS这方面想,只是觉得是普通的递归画图,可是画出来非常的奇怪!后来只好去参考别人的代码,才恍然大悟 。。。 (:з」∠)

参考代码

#include<stdio.h>    
#include<math.h>  
const int maxn = 750; //3^6 = 729 
char map[maxn][maxn];    
void dfs(int n,int x,int y) ;   
int main()    
{    
    int i,j,n,size;    
    while(~scanf("%d",&n) && n != EOF){  
        size=pow(3.0,n-1);  //当前图形的尺寸,不难发现是3^(n-1)  
        for(i = 1;i <= size;i++)   
            for(j = 1;j <= size;j++)    
                map[i][j]=' '; //初始化每个位置都为' '空格    
        dfs(n,1,1);  
        for(i = 1;i <= size;i++)  {//输出图形    
            for(j = 1;j <= size;j++)    
                printf("%c",map[i][j]);    
            printf("\n");    
        }    
        printf("-\n");    
    }    
    return 0;    
}  
void dfs(int n,int x,int y)    
{    
    int size;    
    if(n==1){    
        map[x][y]='X';    
        return ;    
    }    
    size=pow(3.0,n-2);    
    dfs(n-1,x,y);//左上    
    dfs(n-1,x,y+2*size);//右上  
    dfs(n-1,x+size,y+size);  //中间
    dfs(n-1,x+2*size,y);   //左下
    dfs(n-1,x+2*size,y+2*size); //右下   
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值