1 条题解

  • 0
    @ 2025-5-14 23:21:31

    解题思路

    分形结构分析

    nn 阶盒分形可以看作由 55 个 (n1n-1) 阶盒分形组成,分别位于 左上、右上、中间、左下、右下 位置。

    中间部分是一个 (n1n-1) 阶盒分形,其余四个分布在四个角落。

    数学规律

    盒分形的边长是 33^(n1n-1),即 nn=11 时是 11x11nn=22 时是 33x33nn=33 时是 9x9,以此类推。

    对于任意坐标 (ii, jj),如果 (ii / 3k3^k + jj / 3k3^k) % 22 == 00(其中 kk00n1n-1),则该位置是 XX,否则是空格。

    递归 vs 数学计算

    递归方法直接模拟分形构造,但实现较复杂。

    数学方法利用坐标计算,判断是否属于分形部分,更高效。

    解题方法(基于给定C++代码)

    方法:

    数学坐标判定法

    核心思想:

    遍历所有 (ii, jj) 坐标,检查是否满足分形条件。

    对于 nn 阶分形,每个 (ii, jj) 是否属于 XX 取决于在每一层递归中是否处于正确位置。

    关键步骤:

    遍历 iijj003n3^n - 11

    对于每个 (ii, jj),检查是否在所有 kk00kk < nn)下,(ii / 3k3^k + jj / 3k3^k) % 22 == 00

    如果满足条件,输出 XX,否则输出空格。

    C++代码实现:

    #include"stdio.h"
    #include"math.h"
    main()
    {
    	int i,j,n,ii,jj,k;
    	while(scanf("%d",&n)&&n--!=-1)
    	{
    		for(i=0;i<pow(3,n);i++,printf("\n"))
    			for(j=0;j<pow(3,n);j++)
    			{
    				for(ii=i,jj=j,k=0;k<n&&(ii%3+jj%3)%2==0;ii/=3,jj/=3,k++);
    				printf("%c",32+56*(k==n));
    			}
    		printf("-\n");
    	} 
    }
    • 1

    信息

    ID
    1084
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者