• Fractal【分形】


    ##题目大意:
    设一个1级图为

    X
    

    每次再增加4个,
    二级图:

    X X
     X
    X X
    

    三级图:

    X X   X X
     X     X
    X X   X X
       X X
        X
       X X
    X X   X X
     X     X
    X X   X X
    

    以此类推。
    输入nn,输出nn级图。


    ##思路:
    对于一级图

    X
    

    将它往右边复制

    X X
    

    再将它往中间复制

    X X
     X
     
    

    最后将第一行全部往下复制

    X X
     X
    X X
    

    就成了2级图。
    那么也可以使用同样的方法打出三级图,四级图。。。最终直接输出即可。


    ##代码:

    #include <cstdio>
    #include <iostream>
    using namespace std;
    
    int n,num[12];
    bool a[8][1201][1201];
    
    void copy_right(int x)  //往右复制
    {
    	for (int i=1;i<=num[x-1];i++)
    	 for (int j=1;j<=num[x-1];j++)
    	  a[x][i][num[x-1]+num[x-1]+j]=a[x][i][j];
    }
    
    void copy_mid(int x)  //往中间复制
    {
    	for (int i=1;i<=num[x-1];i++)
    	 for (int j=1;j<=num[x-1];j++)
    	  a[x][num[x-1]+i][num[x-1]+j]=a[x][i][j];
    }
    
    void copy_down(int x)  //往下复制
    {
    	for (int i=1;i<=num[x-1];i++)
    	 for (int j=1;j<=num[x];j++)
    	  a[x][i+2*num[x-1]][j]=a[x][i][j];
    }
    
    int main()
    {
    	num[1]=1;
    	for (int i=2;i<=9;i++)
    	 num[i]=num[i-1]*3;  //计算出n级图的长(宽)
    	a[1][1][1]=1;  //1级图
    	for (int i=2;i<=7;i++)  //初始化
    	{
    		for (int j=1;j<=num[i-1];j++)
    		 for (int k=1;k<=num[i-1];k++)
    		  a[i][j][k]=a[i-1][j][k];
    		copy_right(i);
    		copy_mid(i);
    		copy_down(i);
    	}
    	while (1)
    	{
    		scanf("%d",&n);
    		if (n==-1) break;
    		for (int i=1;i<=num[n];i++)
    		{
    			for (int j=1;j<=num[n];j++)
    			 if (a[n][i][j]) putchar('X');
    			  else putchar(' ');
    			putchar(10);  //printf会TLE
    		}
    		putchar('-');putchar(10);
    	}
    	return 0;
    }
    
  • 相关阅读:
    作为技术管理者,我如何保持技术判断力
    管理沟通
    管理规划
    nginx 在浏览器端保持cookie 一致
    openssl 升级操作 -2
    iptables 实际操作 之 规则查询 2
    iptables 概念 1
    openssl 升级 操作 -1
    使用秘钥对登录服务器
    SSH配置免秘钥登录
  • 原文地址:https://www.cnblogs.com/hello-tomorrow/p/11998763.html
Copyright © 2020-2023  润新知