蓝桥杯 算法训练 ALGO-145 4-1打印下述图形

Posted C3Stones

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝桥杯 算法训练 ALGO-145 4-1打印下述图形相关的知识,希望对你有一定的参考价值。

 算法训练 4-1打印下述图形  
时间限制:1.0s   内存限制:256.0MB
问题描述
  使用循环结构打印下述图形,打印行数n由用户输入。打印空格时使用"%s"格式,向printf函数传递只包含一个或多个空格的字符串" ",下同。
样例输入
一个满足题目要求的输入范例。
例:

5
样例输出
与上面的样例输入对应的输出。
例:
数据规模和约定
  输入数据中每一个数的范围。
  例:0<n<20。
 
题目解析:
  本道题共两种思路,由于 n 的范围很小(0 < n <20),所以两种思路就运行时间、占用内存和复杂度并无优劣之分。
  (1)用循环语句分别控制行、每行开始的空格和每行的 *。
    比如,n = 3
            
          
                表 1.1
    利用 i ( i 从 1 开始)来控制行,因此可以推出空格数 space 与 行数 n 和控制行变量 i 的关系: space = n - i ,* 数 asterisk 与控制行变量 i 的关系: asterisk = 2 * i - 1。
 
    (2)将图形存放在 String 类型的数组中,数组初始化为空。如图 1.1 所示,找出中心列号 center = n - 1,每 i 行都是在中心列的左右两边加 i 个 *,最后将数组输出即可。

 

示例代码1:

 1 import java.util.Scanner;
 2 
 3 public class Main {
 4     public static void main(String[] args) {
 5         Scanner sc = new Scanner(System.in);
 6         int n = sc.nextInt();
 7         
 8         for(int i = 1; i <= n; i++){                //控制行
 9             for(int space = n-i ; space >= 1; space--){            //控制每行前边的空格
10                 System.out.print(" ");
11             }
12             for(int asterisk = 1 ; asterisk <= 2 * i - 1; asterisk++){    //控制每行的 * 
13                 System.out.print("*");
14             }
15             System.out.println();
16         }
17     }
18 }

 

示例代码2:

 1 import java.util.Scanner;
 2 
 3 public class Main {
 4 
 5     public static void main(String[] args) {
 6         Scanner sc = new Scanner(System.in);
 7         int n = sc.nextInt();
 8         
 9         String[][] triangle = new String[n][2*n-1];    //创建一个数组,初始化为空
10         for(int i = 0; i < n; i++) {
11             for(int j = 0; j < 2*n-1; j++) {
12                 triangle[i][j] = " ";
13             }
14         }
15         
16         int center = n-1;    //中心列号
17         for(int i = 0; i < n; i++) {        //控制行
18             for(int j = 0; j <= i ; j++) {    //每行在中心左右两边增加 i 个 *
19                 triangle[i][center-j] = "*";
20                 triangle[i][center+j] = "*";
21             }
22         }
23         //输出图形
24         for(int i = 0; i < n; i++) {
25             for(int j = 0; j < 2*n-1; j++) {
26                 System.out.print(triangle[i][j]);
27             }
28             System.out.print("\\n");
29         }
30     }
31 }

   

以上是关于蓝桥杯 算法训练 ALGO-145 4-1打印下述图形的主要内容,如果未能解决你的问题,请参考以下文章

蓝桥杯--算法训练 瓷砖铺放

蓝桥杯 算法提高 5-3日历

蓝桥杯 算法训练 ALGO-149 5-2求指数

蓝桥杯 算法训练 ALGO-152 8-2求完数

蓝桥杯 算法训练 ALGO-146 4-2找公倍数

蓝桥杯 算法训练 ALGO-147 4-3水仙花数