hrbust 2162 哈理工oj 2162 【分形图、搜索】

224 篇文章 2 订阅

三角形
Time Limit: 1000 MSMemory Limit: 32768 K
Total Submit: 43(22 users)Total Accepted: 23(19 users)Rating: Special Judge: No
Description

默认三角形(n=3)是形如下列形状的:

   *

  * *

 *   *

* * * *

n = 4时是这样的

       *

      * *

     *   *

    * * * *

   *       *

  * *     * *

 *   *   *   *

* * * * * * * *

要求输入一个整数n(3<=n<=9),输入符合题意的图形。

Input

多组测试数据,每组一个整数n(3<=n<=9),为一行。

Output

输出图形。注意每行后面没有多余空格。

Sample Input

3

4

6

Sample Output

   *

  * *

 *   *

* * * *

       *

      * *

     *   *

    * * * *

   *       *

  * *     * *

 *   *   *   *

* * * * * * * *

                               *

                              * *

                             *   *

                            * * * *

                           *       *

                          * *     * *

                         *   *   *   *

                        * * * * * * * *

                       *               *

                      * *             * *

                     *   *           *   *

                    * * * *         * * * *

                   *       *       *       *

                  * *     * *     * *     * *

                 *   *   *   *   *   *   *   *

                * * * * * * * * * * * * * * * *

               *                               *

              * *                             * *

             *   *                           *   *

            * * * *                         * * * *

           *       *                       *       *

          * *     * *                     * *     * *

         *   *   *   *                   *   *   *   *

        * * * * * * * *                 * * * * * * * *

       *               *               *               *

      * *             * *             * *             * *

     *   *           *   *           *   *           *   *

    * * * *         * * * *         * * * *         * * * *

   *       *       *       *       *       *       *       *

  * *     * *     * *     * *     * *     * *     * *     * *

 *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Source
2014暑假集训练习赛(8月13日)

解题过程:

n==3的时候图是这样的:

   *

  * *

 *   *

* * * *

做分形题第一个要点一定要找到最基础的图形才行,其实这个图算作一个基础图形也可以,但是操作相对会繁杂一点,所以我们可以弄出n==2的时候的图(虽然不需要输出n==2的时候的图)


这个时候我们对于n==3的图进行探究。

其实我们可以利用深搜递归的思想来从最基础也是最顶端的这个最基础的图的三个点递推向下找他们递归到的位子如图:


为了更加突出递归的思想,我们对于n==4的图进行一个顶点的探究:


从中慢慢得出规律,从而得之,我们只要递归一下最基础图(n==2时候的图)的三个点就行了、

初始化的时候我们将输出的数组都初始化为空格,然后等递归完毕之后,从后边向前扫,如果扫到了*,后边加一个‘\0’即可保证没有多余空格的输出。

AC代码:

#include<stdio.h>
#include<string.h>
#include<math.h>
using namespace std;
char a[4000][4000];
void dfs(int shendu,int x,int y)
{
    a[x][y]='*';
    if(shendu==1)return ;
    dfs(shendu-1,x,y);
    dfs(shendu-1,x+pow(2,shendu-1),y-pow(2,shendu-1));
    dfs(shendu-1,x+pow(2,shendu-1),y+pow(2,shendu-1));
}
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        n--;
        memset(a,' ',sizeof(a));
        dfs(n,1,pow(2,n));
        dfs(n,2,pow(2,n)-1);
        dfs(n,2,pow(2,n)+1);
        for(int i=0;i<pow(2,n)+1;i++)
        {
            for(int j=pow(2,n+1)+1;j>=0;j--)
            {
                if(a[i][j]=='*')
                {
                    a[i][j+1]='\0';
                    break;
                }
            }
        }
        for(int i=1;i<pow(2,n)+1;i++)
        {
            printf("%s\n",a[i]+1);
        }
    }
}






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值