MENU

第九届蓝桥杯Java A——打印图形

March 22, 2019 • Read: 3382 • 算法阅读设置

如下的程序会在控制台绘制分形图(就是整体与局部自相似的图形)

当n=1,2,3的时候,输出如下:
请仔细分析程序,并填写划线部分缺少的代码

n=1时:

 o 
ooo
 o 

n=2时:

    o    
   ooo   
    o    
 o  o  o 
ooooooooo
 o  o  o 
    o    
   ooo   
    o    

n=3时:

             o             
            ooo            
             o             
          o  o  o          
         ooooooooo         
          o  o  o          
             o             
            ooo            
             o             
    o        o        o    
   ooo      ooo      ooo   
    o        o        o    
 o  o  o  o  o  o  o  o  o 
ooooooooooooooooooooooooooo
 o  o  o  o  o  o  o  o  o 
    o        o        o    
   ooo      ooo      ooo   
    o        o        o    
             o             
            ooo            
             o             
          o  o  o          
         ooooooooo         
          o  o  o          
             o             
            ooo            
             o     

源程序:

public class Main {

    static void show(byte[][] buf) {
        for (int i = 0; i < buf.length; i++) {
            for (int j = 0; j < buf[i].length; j++) {
                System.out.print(buf[i][j] == 0 ? ' ' : 'o');
            }
            System.out.println();
        }
    }

    static void draw(byte[][] buf, int x, int y, int size) {
        if (size == 1) {
            buf[y][x] = 1;
            return;
        }

        int n = size / 3; // 填空
        draw(buf, x, y, n);
        draw(buf, x - n, y, n);
        draw(buf, x + n, y, n);
        draw(buf, x, y - n, n);
        draw(buf, x, y + n, n);
    }

    public static void main(String[] args) {
        final int N = 3;
        int t = 1;
        for (int i = 0; i < N; i++)
            t *= 3;

        byte[][] buf = new byte[t][t];
        draw(buf, t / 2, t / 2, t);
        show(buf);
    }
}
Archives Tip
QR Code for this page
Tipping QR Code