1.输入两个表示复数的字符串,输出它们相乘的结果的字符串复数字符串用a+bi表示(a, b 为整数, i为虚数单位)
const readline = require('readline')
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
})
/*
思路:
1.得到a,b,c,d
2.套公式 (a + bi)(c + di) = (ac - bd) + (bc + ad)i
输入例子:
1+-2i
3+4i
*/
let input = []
let maxLine = 2
// a b 单个数字
function parse(str) {
let arr = str.split('+') // ['1', '-2i']
let a = arr[0]
let b
// 如果虚数部分没有i ,就处理成1
if (arr[1][arr[1].length - 1] !== 'i') {
b = 1
}else {
b = arr[1].slice(0, -1) // i前边的
}
return {a, b}
}
function solution(input) {
// 处理输入的两行数,调用parse函数,得到两个输入的复数x , y 的实数和虚数部分数值
let x = parse(input[0])
let y = parse(input[1])
// 得到的x,y是两个字符串'1+-2i' '3+4i'
// 需要将其处理成a b (也就是实数和虚数部分)单个数字再套公式(a+bi)(c+di) = (ac-bd) + (bc+ad)i
//console.log(x ,y) // { a: '1', b: '-2' } { a: '3', b: '4' }
return `${x.a * y.a - x.b * y.b}+${x.b * y.a + x.a * y.b}i`
}
rl.on('line', (line) => {
input.push(line)
if (input.length === maxLine) {
console.log(solution(input))
rl.close()
}
})
2.输入一个"YYYY-MM-dd"格式的日期字符串,输出该天是当年的第几天(1 月 1 日是每年的第 1 天)
const readline = require('readline')
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
})
/*
输入例子:
2004-03-01
输出例子:
61
思路:
1. 判断平年闰年
2. 计算天数
*/
function solution(input) {
// 处理输入,得到年 月 日
let dateArr = input.split('-')
dateArr = dateArr.map(item => Number(item))
// console.log(dateArr) // [ 2004, 3, 1 ]
let year = dateArr[0]
let month = dateArr[1]
let date = dateArr[2]
let sum = 0
// 定义一个平年天数的数组
let days = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
// 判断平年闰年
if ((year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0)) { // 闰年
// 将数组2月天数改为29
days[2] = 29
for (let i = 0; i < month; i++) {
sum += days[i]
}
sum += date
} else { // 平年
for (let i = 0; i < month; i++) {
sum += days[i]
}
sum += date
}
return sum
}
rl.on('line', (line) => {
console.log(solution(line))
})
3.给你一个链表,每 k 个节点一组进行翻转,请返回翻转后的链表。
如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
示例 :
给定这个链表:1->2->3->4->5
当 k = 2 时,应当返回: 2->1->4->3->5
当 k = 3 时,应当返回: 3->2->1->4->5
const readline = require('readline')
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
})
/*
输入:
1 2 3 4 5 #
2
开始:1->2->3->4->5 k = 2
转换后:2->1->4->3->5
*/
let input = []
let maxLine = 2
function solution (input) {
// 得到输入第一行,转化为数组
let arr = input[0].split(' ').map(item => Number(item))
// 切割后新的二维数组
let newTwoArr = []
// k
let k = parseInt(input[1])
// 转换后的字符串
let str = ''
// 删除最后的 #
arr.pop()
// 进行数组间的交换(也就是按指定K,一组一组逆序输出)
for (let i = 0; i < arr.length; i+=k) {
newTwoArr.push(arr.slice(i, i+k)) // 根据k,将原数组划分成一组一组
}
// console.log(newTwoArr) // [ [ 1, 2 ], [ 3, 4 ] ]
// 将这个二维数组中每一项都翻转
for (let j = 0; j < newTwoArr.length; j++) {
// 判断,只有每个元素长度为k时,才翻转
if (newTwoArr[j].length === k) {
newTwoArr[j].reverse()
}
}
// console.log(newTwoArr) // [ [ 2, 1 ], [ 4, 3 ] ]
str = newTwoArr.join('->')
// console.log(str) // 3,2,1->6,5,4->7
str = str.replace(/,/g, '->')
return str
}
rl.on('line', (line) => {
input.push(line)
if (input.length === maxLine) {
console.log(solution(input))
rl.close()
}
})