2 条题解

  • 0
    @ 2025-10-8 16:51:30

    题解

    问题描述:生成一个边长为 (3^{n-1}) 的分形三角形图案,其中三角形的顶点及中心位置为'X',其余位置为空格。

    思路分析:采用递归(深度优先搜索)方法构建分形结构。当 (n=1) 时,仅在中心位置放置一个'X';当 (n>1) 时,将当前三角形分为5个更小的三角形(四个角和中心),每个小三角形递归生成。

    代码解析

    • 数组 d 存储不同层级的三角形边长,d[i] = 3^(i-1),因此边长为 d[n] = 3^(n-1)
    • dfs 函数通过递归生成'X'的位置:当 n=1 时,在 (x,y) 处放置'X';当 n>1 时,递归生成5个小三角形的'X'位置,具体坐标由当前大三角形位置和边长决定。
    • 主函数读取输入 n,初始化数组,调用 dfs(1,1,n) 生成图案,最后按行打印网格,空格表示未放置'X'的位置。
    #include<bits/stdc++.h>
    using namespace std;
    const int N=27*27*3+1;
    char s[N][N];
    int d[9];
    void dfs(int x, int y, int n)
    {
        if(n==1){s[x][y]='X';return ;}
        dfs(x, y, n-1);                  dfs(x, y+2*d[n-1], n-1);
                   dfs(x+d[n-1], y+d[n-1], n-1);
        dfs(x+2*d[n-1], y, n-1);         dfs(x+2*d[n-1], y+2*d[n-1], n-1);
    }
    int main()
    {
        int n;scanf("%d",&n);
        memset(s,0,sizeof(s));
        d[1]=1;for(int i=2;i<=8;i++) d[i]=d[i-1]*3;
        dfs(1,1,n);
        for(int i=1;i<=d[n];i++)
        {
            for(int j=1;j<=d[n];j++)if(s[i][j]==0) printf(" ");else printf("%c",s[i][j]); 
            printf("\n");
        }
        return 0;
    }
    
    • 0
      @ 2025-10-8 16:51:02
      #include<bits/stdc++.h>
      using namespace std;
      const int N=27*27*3+1;
      char s[N][N];
      int d[9];
      void dfs(int x,int y,int n)
      {
      	if(n==1){s[x][y]='X';return ;}
      	dfs(x,y,n-1);                  dfs(x,y+2*d[n-1],n-1);
      	           dfs(x+d[n-1],y+d[n-1],n-1);
      	dfs(x+2*d[n-1],y,n-1);         dfs(x+2*d[n-1],y+2*d[n-1],n-1);
      }
      int main()
      {
      	int n;scanf("%d",&n);
      	memset(s,0,sizeof(s));
      	d[1]=1;for(int i=2;i<=8;i++) d[i]=d[i-1]*3;
      	dfs(1,1,n);
      	for(int i=1;i<=d[n];i++)
      	{
      		for(int j=1;j<=d[n];j++)if(s[i][j]==0) printf(" ");else printf("%c",s[i][j]); 
      		printf("\n");
      	}
      	return 0;
      }
      • 1

      信息

      ID
      527
      时间
      1000ms
      内存
      256MiB
      难度
      5
      标签
      递交数
      80
      已通过
      31
      上传者