Imprima um losango - um dos algoritmos mais eficientes

1 Título: Escreva um programa que possa imprimir gráficos com qualquer número de linhas que atendam às seguintes regras, onde a entrada é um parâmetro int, representando o número de linhas gráficas e o número de linhas é um número ímpar maior que 3.
insira a descrição da imagem aqui
2 Idéias para resolver o problema:
Idéia 1: Divida o gráfico em duas partes, a parte superior é um ciclo e a parte inferior é um ciclo e imprima " " e * respectivamente; mas esse método é muito ineficiente.
Ideia 2: Divida o gráfico em duas partes, sendo que a parte superior é usada como um ciclo para imprimir " " e * respectivamente; e armazene o conteúdo impresso do anterior (número de linhas - 1/2) na pilha e, em seguida, imprima o conteúdo na pilha, isso será muito eficiente. Quando o valor de entrada é 101, o tempo de impressão é de apenas 5ms, mas ao usar a ideia 1, leva 2851ms.
3 código 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 em execução
insira a descrição da imagem aqui

Acho que você gosta

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