• 蓝桥杯 算法训练 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("
    ");
    29         }
    30     }
    31 }

       

  • 相关阅读:
    写一个工具生成数据库实体类
    自己写一个java的mvc框架吧(三)
    自己写一个java的mvc框架吧(二)
    自己写一个java的mvc框架吧(一)
    手把手教你写一个java的orm(完)
    JavaEE系列之(二)commons-fileupload实现文件上传、下载
    JavaEE系列之(一)JSP基础知识详解
    Servlet---JavaWeb技术的核心基础,JavaWeb框架的基石(二)
    Servlet---JavaWeb技术的核心基础,JavaWeb框架的基石(一)
    cygwin简介及使用
  • 原文地址:https://www.cnblogs.com/cao-lei/p/6690167.html
Copyright © 2020-2023  润新知