【蓝桥杯省赛】冲刺练习题【绘图】倒计时【10】天-2

简介: 【蓝桥杯省赛】冲刺练习题【绘图】倒计时【10】天

5、打印图形

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


当 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 = ____________; // 填空
        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);
    }
}

题解:


package test;
public class demo {
  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);
  }
}

完成:


     

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

6、打印十字图

资源限制

时间限制:1.0s 内存限制:256.0MB


问题描述

小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示:


image.png


对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。


输入格式

一个正整数 n (n<30) 表示要求打印图形的层数。


输出格式

对应包围层数的该标志。


样例输入

1


样例输出


image.png


样例输入

3


样例输出


image.png


package test;
import java.util.Scanner;
public class demo {
  static char[][] arr;
  static int s;
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    while (sc.hasNext()) {
      int n = sc.nextInt();
      s = 5 + n * 4;// 观察可得,输出的均是5+n*4的矩阵
      arr = new char[s][s];
      for (int i = 0; i < s; i++) {
        for (int j = 0; j < s; j++) {
          arr[i][j] = '.';// 初始化矩阵
        }
      }
      tian(0, s, 0);
      for (int i = 0; i < s; i++) {
        for (int j = 0; j < s; j++) {
          System.out.print(arr[i][j]);
        }
        System.out.println();
      }
    }
    sc.close();
  }
  // count是每次递归开始的横坐标,len是每次递归瘦两圈前的最大长度,bu是步数
  private static void tian(int count, int len, int bu) {
    if (bu > s / 4) { // 递归次数大于s/4就退出
      arr[s / 2][s / 2] = '$'; // 填补最中心的点
      return;
    }
    if (count != 0) {// 不是第一圈就填上四个角
      arr[count][count] = arr[count][len - 1] = arr[len - 1][count] = arr[len - 1][len - 1] = '$';
    }
    for (int i = count + 2; i < len - 2; i++) {
      // 每次递归改变的第一行
      arr[count][i] = arr[i][count] = arr[len - 1][i] = arr[i][len - 1] = '$';
      // 每次递归改变的第二行
      if (i == count + 2 || i == len - 3) {
        arr[count + 1][i] = arr[i][count + 1] = arr[len - 2][i] = arr[i][len - 2] = '$';
      }
    }
    // count+2,len-2起到瘦两圈的效果
    tian(count + 2, len - 2, bu + 1);
  }
}
相关文章
|
机器学习/深度学习 机器人 API
【蓝桥杯省赛】冲刺练习题【经典题目练习】倒计时【01】天(准考证组委会已下发,请查询)-1
【蓝桥杯省赛】冲刺练习题【经典题目练习】倒计时【01】天(准考证组委会已下发,请查询)
95 0
【蓝桥杯省赛】冲刺练习题【经典题目练习】倒计时【01】天(准考证组委会已下发,请查询)-1
|
机器学习/深度学习
【蓝桥杯省赛】冲刺练习题【数学公式】倒计时【06】天(准考证组委会已下发,请查询)-1
【蓝桥杯省赛】冲刺练习题【数学公式】倒计时【06】天(准考证组委会已下发,请查询)
91 0
【蓝桥杯省赛】冲刺练习题【数学公式】倒计时【06】天(准考证组委会已下发,请查询)-1
|
存储 监控 搜索推荐
【蓝桥杯省赛】冲刺练习题【经典题目练习】倒计时【01】天(准考证组委会已下发,请查询)-2
【蓝桥杯省赛】冲刺练习题【经典题目练习】倒计时【01】天(准考证组委会已下发,请查询)
179 0
【蓝桥杯省赛】冲刺练习题【绘图】倒计时【10】天-1
【蓝桥杯省赛】冲刺练习题【绘图】倒计时【10】天
76 0
|
1月前
|
人工智能 算法 Java
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-992 士兵杀敌(二)
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-992 士兵杀敌(二)
35 1
|
1月前
|
人工智能 算法 Java
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1005 数字游戏
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1005 数字游戏
64 0
|
1月前
|
Java C语言 C++
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1000 kAc给糖果你吃
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1000 kAc给糖果你吃
50 0
|
1月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-999 数的潜能
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-999 数的潜能
50 0
|
1月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-997 粘木棍
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-997 粘木棍
59 0
|
1月前
|
机器学习/深度学习 算法 Java
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-996 车的放置
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-996 车的放置
53 0