Solución del problema de Pintia-7-10 Impresión de reloj de arena

7-10 Imprimir reloj de arena

Titulo original:

Esta pregunta requiere que escriba un programa para imprimir un símbolo determinado en forma de reloj de arena. Por ejemplo, dado 17 "*", se requiere imprimir en el siguiente formato

*****
 ***
  *
 ***
*****

La llamada "forma de reloj de arena" significa que cada línea genera un número impar de símbolos; los centros de los símbolos en cada línea están alineados; la diferencia en el número de símbolos entre dos líneas adyacentes es 2; el número de símbolos primero disminuye de mayor a menor hasta 1, y luego aumenta en orden de menor a mayor; el primer y último símbolo Los números son iguales.

Dados N símbolos, es posible que no formen exactamente un reloj de arena. Se requiere que el reloj de arena impreso utilice tantos símbolos como sea posible.

Formato de entrada:

La entrada proporciona un número entero positivo N (≤1000) y un símbolo en una línea, separados por espacios.

Formato de salida:

Primero imprima la forma de reloj de arena más grande que consta de los símbolos dados y, finalmente, imprima la cantidad de símbolos restantes no utilizados en una línea.

.

Ideas para resolver problemas:

  1. Importe readlineel módulo y cree un objeto de interfaz: primero readlineintroduzca el módulo y use createInterfacemétodos para crear un objeto de interfaz rl. Este objeto establece el flujo de entrada en entrada estándar.
  2. Leer entrada y almacenar: al escuchar 'line'eventos, almacene cada línea de entrada en una matriz buf.
  3. Analice la entrada: al buf[0].split(" ")dividir la primera línea del texto de entrada, obtenga la longitud del lado del rombo n y el carácter de relleno c.
  4. Calcula la longitud de un rombo: usa la fórmula m = Math.floor(Math.sqrt((parseInt(n) + 1) / 2))para calcular la mitad de la longitud del lado del rombo, m.
  5. Genere el patrón de diamante: use dos bucles anidados para recorrer cada posición del área del diamante, use condiciones de juicio para determinar si la posición actual debe llenarse con el carácter c y almacene el resultado en una cadena row. Finalmente, el patrón de diamante se genera a través console.logdel método.
  6. parseInt(n) - 2 * m * m + 1Números de salida: calcule los números que deben generarse a través de fórmulas y envíelos a la consola.

.

Código JavaScript (nodo):

const r = require("readline");
const rl = r.createInterface({
    
    
    input: process.stdin
});
let buf = [];
rl.on('line', (input) => buf.push(input));
rl.on('close', () => {
    
    
    let text = buf[0].split(" ")
    const n = text[0];
    const c = text[1];

    const m = Math.floor(Math.sqrt((parseInt(n) + 1) / 2));

    for (let i = 0; i < 2 * m - 1; i++) {
    
    
        let row = '';
        for (let j = 0; j < 2 * m - 1; j++) {
    
    
            if ((i > j && i + j < 2 * m - 2) || (i < j && i + j > 2 * m - 2)) {
    
    
                if (i > j && i + j < 2 * m - 2) {
    
    
                    row += ' ';
                }
            } else {
    
    
                row += c;
            }
        }
        console.log(row);
    }

    console.log(parseInt(n) - 2 * m * m + 1);
});

.

Análisis de complejidad:

Complejidad del tiempo: O (2n)
Complejidad espacial: O (n)

Supongo que te gusta

Origin blog.csdn.net/Mredust/article/details/133519033
Recomendado
Clasificación