Tabla de contenido
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:
- Importe
readline
el módulo y cree un objeto de interfaz: primeroreadline
introduzca el módulo y usecreateInterface
métodos para crear un objeto de interfazrl
. Este objeto establece el flujo de entrada en entrada estándar. - Leer entrada y almacenar: al escuchar
'line'
eventos, almacene cada línea de entrada en una matrizbuf
. - 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. - 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. - 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ésconsole.log
del método. parseInt(n) - 2 * m * m + 1
Nú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);
});
.