Solución del problema de Pintia——7-23 Problema en el tren de Estocolmo

7-23 Preguntas sobre el tren de Estocolmo

Titulo original:

La imagen de arriba es una anécdota interesante en Sina Weibo. Es una pregunta en un tren en Estocolmo, Suecia. Parece un fragmento de pseudocódigo:

s = ''
a = '1112031584'
for (i = 1; i < length(a); i++) {
  if (a[i] % 2 == a[i-1] % 2) {
    s += max(a[i], a[i-1])
  }
}
goto_url('www.multisoft.se/' + s)

La +operación de cadena significa concatenar dos cadenas. Entonces, esta pregunta en realidad les pide a todos que visiten el sitio web www.multisoft.se/112358( nota: ¡¡¡no visiten este sitio web durante la competencia!!! ).

Por supuesto, 112358la cadena original que se puede obtener mediante el algoritmo anterior ano es única. Esta pregunta le pide que juzgue si dos cadenas originales dadas pueden obtener el mismo resultado a través del algoritmo anterior.

Formato de entrada:

La entrada son dos líneas de cadenas no vacías que consisten únicamente en números, cuya longitud no excede 104 y terminan con un retorno de carro.

Formato de salida:

Las dos cadenas se procesan utilizando el algoritmo anterior en el tren de Estocolmo. Si los dos resultados son iguales, genere ese resultado en una línea; de lo contrario, genere los resultados de procesamiento correspondientes por separado, cada uno ocupando una línea. La pregunta garantiza que el resultado de salida no esté vacío.

.

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, la entrada se almacena en una matriz buf.
  3. Inicializar variables de resultado: establezca las variables de resultado iniciales res1y res2en la cadena vacía.
  4. Procese la primera cadena: use forun bucle para iterar sobre la primera cadena de entrada, indexando a partir de 1. Para el carácter en cada posición del índice, determine si su paridad es la misma que la del carácter anterior. Si son iguales, se agrega el mayor de los dos caracteres res1.
  5. Procese la segunda cadena: use forun bucle para iterar sobre la segunda cadena de entrada, el índice comienza desde 1, la lógica es la misma que procesar la primera cadena. Agregue el valor máximo que cumpla con los criterios a res2.
  6. Compare los resultados y la salida: compare res1si res2la suma es igual. Si son iguales, significa que la paridad de los números adyacentes en las dos cadenas es la misma y la salida res1. Si no son iguales, significa que la paridad de los números adyacentes en las dos cadenas es diferente y se genera la res1suma res2, separada por un carácter de nueva línea.
  7. Utilice console.logla salida.

.

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 res1 = '';
    for (let i = 1; i < buf[0].length; i++) {
    
    
        if (buf[0][i] % 2 == buf[0][i - 1] % 2) {
    
    
            res1 += Math.max(buf[0][i], buf[0][i - 1]);
        }
    }

    let res2 = '';
    for (let i = 1; i < buf[1].length; i++) {
    
    
        if (buf[1][i] % 2 == buf[1][i - 1] % 2) {
    
    
            res2 += Math.max(buf[1][i], buf[1][i - 1]);
        }
    }

    if (res1 === res2) {
    
    
        console.log(res1);
    } else {
    
    
        console.log(`${
      
      res1}\n${
      
      res2}`);
    }
});

.

Análisis de complejidad:

Complejidad del tiempo: O (n)
Complejidad espacial: O (n+m)

Supongo que te gusta

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