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,以回车结束。
输出格式:
对两个字符串分别采用上述斯德哥尔摩火车上的算法进行处理。如果两个结果是一样的,则在一行中输出那个结果;否则分别输出各自对应的处理结果,每个占一行。题目保证输出结果不为空。
.
解题思路:
- 引入
readline
模块并创建接口对象:首先将readline
模块引入,并使用createInterface
方法创建一个接口对象rl
。该对象设置了输入流为标准输入。 - 读取输入并存储:通过监听
'line'
事件,将输入存储在数组buf
中。 - 初始化结果变量:将初始结果变量
res1
和res2
设置为空字符串。 - 处理第一个字符串:使用
for
循环遍历第一个输入字符串,索引从1开始。对于每个索引位置的字符,判断它与前一个字符的奇偶性是否相同。如果相同,则将两个字符中较大的数添加到res1
中。 - 处理第二个字符串:使用
for
循环遍历第二个输入字符串,索引从1开始,逻辑与处理第一个字符串相同。将符合条件的最大值添加到res2
中。 - 比较结果并输出:比较
res1
和res2
是否相等。如果相等,则说明两个字符串的相邻数字的奇偶性相同,输出res1
。如果不相等,则说明两个字符串的相邻数字的奇偶性不同,输出res1
和res2
,中间用换行符分隔。 - 使用
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}`);
}
});
.