Imprimir un rombo - uno de los algoritmos más eficientes

1 Título: escriba un programa que pueda imprimir gráficos con cualquier número de líneas que cumpla con las siguientes reglas, donde la entrada es un parámetro int, que representa el número de líneas de gráficos, y el número de líneas es un número impar mayor que 3.
inserte la descripción de la imagen aquí
2 Ideas para resolver el problema:
Idea 1: Divida la gráfica en dos partes, la parte superior es un ciclo, y la parte inferior es un ciclo, y escriba " " y * respectivamente, pero este método es demasiado ineficiente.
Idea 2: Divida el gráfico en dos partes, y la parte superior se usa como un ciclo para imprimir " " y * respectivamente; y almacene el contenido impreso del anterior (número de líneas - 1/2) en la pila, y luego imprimir el contenido en la pila, esto será muy eficiente. Cuando el valor de entrada es 101, el tiempo de impresión es de solo 5 ms, pero cuando se usa la idea 1, tarda 2851 ms.
3 codigo java

import java.util.*;
/*
   用栈实现
 */
public class PrintChartOne {
    
    
    public static void main(String[] args){
    
    
        System.out.println("请输入字符串=? ");
        Scanner input=new Scanner(System.in);
        int lineNumber=input.nextInt();
        long startTime = System.currentTimeMillis();//获取当前时间
        PrintChartOne printChartOne=new PrintChartOne();
        printChartOne.printPentagram(lineNumber);
        long endTime = System.currentTimeMillis();
        System.out.println("程序运行时间:"+(endTime-startTime)+"ms");
    }
    public  void printPentagram(int lineNumber){
    
    
        if ((lineNumber>3) &&(lineNumber%2==1) ) {
    
    
            String sStar = "*";
            String sBlank = " ";//空格
            //字符串栈
            Stack sPrintStackS = new Stack();
            for (int i = 1; i <= (lineNumber - 1) / 2 + 1; i++) {
    
    
                String sPrintStar = "";//用来打印每行的"*"
                String sPrintBlank = "";//用来打印每行的" "
                //前i 每行*的数量
                int sStarNumber = 2 * i - 1;
                for (int j = 1; j <= sStarNumber; j++) {
    
    
                    sPrintStar = sPrintStar + sStar;
                }
                //前i 每行" "的数量
                int sLeftBlankNumber = (lineNumber - sStarNumber) / 2;
                for (int k = 1; k <= sLeftBlankNumber; k++) {
    
    
                    sPrintBlank = sPrintBlank + sBlank;
                }
                //打印前(lineNumber-1)/2+1行
                String sPrint = sPrintBlank + sPrintStar;
                System.out.println(sPrint);
                //前i-1行内容写入栈
                if (i <= (lineNumber - 1) / 2) {
    
    
                    sPrintStackS.push(sPrint);
                }
            }
            //打印后(lineNumber-1)/2行
            while (!sPrintStackS.empty()) {
    
    
                System.out.println(sPrintStackS.pop());
            }
        } else System.out.println("请输入大于3的奇数!");
    }
}



4 resultados en ejecución
inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/helloworldchina/article/details/107380442
Recomendado
Clasificación