Skip to content

HJ8 合并表记录

题目描述

image-20220301165731076

示例

image-20220301165741895

代码

js
/*
相同索引的求和

我可以在输入的时候 就求出来
用一个map保存起来,
key是索引
val是求得的和

如果首次输入,就 set(key, val)
如果是非首次输入,就 get(key)求和 重新赋值

*/

let readline = require('readline')
let rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
})


let count = 0 // 记录第几次输入
let inputLen = -1 // 第一次输入的值,为接下来输入的次数
let inputArr = [] // 输入的值保存在此
let resultMap = new Map() // 相同key的直接求和

rl.on('line', line=>{
    count++
    
    if( count === 1 ){
        inputLen = +line // 第一次输入的是次数
    }else {
        let [key,value] = line.split(' ').map(Number)
        inputArr.push([key, value]) // 把输入的值 保存起来
        
        if( resultMap.has(key) ){ // 如果map里已经有这个key值了,就累加和
            let curVal = resultMap.get(key)
            resultMap.set( key, curVal+value ) // 重新赋值,求和
        }else { // 如果map里没有这个key值,说明是首次输入,就记录下来
            resultMap.set(key, value)
        }
        
        // 输出结果
        if(inputArr.length === inputLen){
            // 把key值拿出来 排下序,因为要按顺序输出
            let keys = Array.from(resultMap.keys()).sort((a,b)=>{
                return a-b
            })
            
            for( let key of keys ){
                console.log( `${key} ${resultMap.get(key)}` )
            }
            
            rl.close()
            
        }
        
    }
})

题目来源

HJ8 合并表记录