Pintia题解——7-23 斯德哥尔摩火车上的题

7-23 斯德哥尔摩火车上的题

原题:

上图是新浪微博上的一则趣闻,是瑞典斯德哥尔摩火车上的一道题,看上去是段伪代码:

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)

其中字符串的 + 操作是连接两个字符串的意思。所以这道题其实是让大家访问网站 www.multisoft.se/112358注意:比赛中千万不要访问这个网址!!!)。

当然,能通过上述算法得到 112358 的原始字符串 a 是不唯一的。本题就请你判断,两个给定的原始字符串,能否通过上述算法得到相同的输出?

输入格式:

输入为两行仅由数字组成的非空字符串,长度均不超过 104,以回车结束。

输出格式:

对两个字符串分别采用上述斯德哥尔摩火车上的算法进行处理。如果两个结果是一样的,则在一行中输出那个结果;否则分别输出各自对应的处理结果,每个占一行。题目保证输出结果不为空。

.

解题思路:

  1. 引入readline模块并创建接口对象:首先将readline模块引入,并使用createInterface方法创建一个接口对象rl。该对象设置了输入流为标准输入。
  2. 读取输入并存储:通过监听'line'事件,将输入存储在数组buf中。
  3. 初始化结果变量:将初始结果变量res1res2设置为空字符串。
  4. 处理第一个字符串:使用for循环遍历第一个输入字符串,索引从1开始。对于每个索引位置的字符,判断它与前一个字符的奇偶性是否相同。如果相同,则将两个字符中较大的数添加到res1中。
  5. 处理第二个字符串:使用for循环遍历第二个输入字符串,索引从1开始,逻辑与处理第一个字符串相同。将符合条件的最大值添加到res2中。
  6. 比较结果并输出:比较res1res2是否相等。如果相等,则说明两个字符串的相邻数字的奇偶性相同,输出res1。如果不相等,则说明两个字符串的相邻数字的奇偶性不同,输出res1res2,中间用换行符分隔。
  7. 使用console.log输出结果。

.

JavaScript(node)代码:

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}`);
    }
});

.

复杂度分析:

时间复杂度:O(n)
空间复杂度:O(n+m)

猜你喜欢

转载自blog.csdn.net/Mredust/article/details/133519825