zoukankan      html  css  js  c++  java
  • Fractal---poj2083(递归和普通方法打印图形)

    题目链接:http://poj.org/problem?id=2083

    这题不能用G++提交...

    见到两次知道有递归的写法,然而并不会,这次发现并不难;

    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    using namespace std;
    
    int len[8]= {0,1}, s[1000][1000];
    
    void dfs(int n, int x, int y)
    {
        s[x][y]=1;
        if(n==7)return ;
    
        int m = len[n];
    
        dfs(n+1, x, y);///左上
        dfs(n+1, x, y+2*m);///左下
        dfs(n+1, x+2*m, y);///右上
        dfs(n+1, x+m, y+m);///中间
        dfs(n+1, x+2*m, y+2*m);///右下
    }
    
    int main()
    {
        memset(s, 0, sizeof(s));
        for(int i=2; i<=7; i++)
            len[i]=3*len[i-1];
        dfs(1, 1, 1);
        int n;
        while(scanf("%d", &n), n!=-1)
        {
            for(int i=1; i<=len[n]; i++)
            {
                for(int j=1; j<=len[n]; j++)
                {
                    if(s[i][j]==1)printf("X");
                    else printf(" ");
                }
                printf("
    ");
            }
            printf("-
    ");
        }
        return 0;
    }
    View Code

    下面是我写的比较恶心的代码:

    #include<stdio.h>
    #include<string.h>
    #define N 903
    #define met(a, b) memset(a, b, sizeof(a))
    
    struct node
    {
        int len;
        char s[N][N];
    }a[8];
    
    void P1(char s[][N], int X1, int X2, int Y1, int Y2, char s0[][N])
    {
        for(int i=X1, p=0; i<=X2; i++, p++)
        {
            for(int j=Y1, q=0; j<=Y2; j++, q++)
            {
                s[i][j] = s0[p][q];
            }
        }
    }
    void P2(char s[][N], int X1, int X2, int Y1, int Y2)
    {
        for(int i=X1; i<=X2; i++)
        {
            for(int j=Y1; j<=Y2; j++)
            {
                s[i][j] = ' ';
            }
        }
    }
    void Init()
    {
        met(a, 0);
        a[1].s[0][0] = 'X';
        a[1].len = 1;
    
        for(int i=2; i<=7; i++)
        {
            int n = a[i-1].len;
            a[i].len = n*3;
    
            P1(a[i].s, 0, n-1, 0, n-1, a[i-1].s);
            P2(a[i].s, 0, n-1, n, 2*n-1);
            P1(a[i].s, 0, n-1, 2*n, 3*n-1, a[i-1].s);
    
            P2(a[i].s, n, 2*n-1, 0, n-1);
            P1(a[i].s, n, 2*n-1, n,2*n-1, a[i-1].s);
            P2(a[i].s, n, 2*n-1, 2*n, 3*n-1);
    
            P1(a[i].s, 2*n, 3*n-1, 0, n-1, a[i-1].s);
            P2(a[i].s, 2*n, 3*n-1, n, 2*n-1);
            P1(a[i].s, 2*n, 3*n-1, 2*n, 3*n-1, a[i-1].s);
        }
    }
    
    int main()
    {
        Init();
        int n;
        while(scanf("%d", &n), n!=-1)
        {
            for(int i=0; i<a[n].len; i++)
            {
                for(int j=0; j<a[n].len; j++)
                    printf("%c",a[n].s[i][j]);
                printf("
    ");
            }
            printf("-
    ");
        }
        return 0;
    }
    View Code
  • 相关阅读:
    Head First 设计模式 --11 代理模式
    spring-boot启动信息中non-fatal error
    在eclipse中用gradle搭建MapReduce项目
    ubuntu14.04 Hadoop单机开发环境搭建MapReduce项目
    Android log日志
    Android studio编译之后显示中文乱码的问题解决办法
    Android官方文档
    Android应用程序中应用图标和名字的设置
    转:java提取图片中的像素
    Android手机开机自动启动
  • 原文地址:https://www.cnblogs.com/zhengguiping--9876/p/5025751.html
Copyright © 2011-2022 走看看