牛客ACM部分输入输出整理

一些基本点

主要都是先把输入转换成数组,之后就可以使用数组的各种操作去进行不同变换

split()方法

split() 方法接受一个模式,通过搜索模式将字符串分割成一个有序的子串列表,将这些子串放入一个数组,并返回该数组

//按空格分隔
const str = 'The quick brown fox jumps over the lazy dog.';
const words = str.split(' ');
console.log(words);
// ["The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog."]

//直接分隔
const char = 'abcdefg'
const char2 = char.split('')
console.log(char2)
// ["a", "b", "c", "d", "e", "f", "g"]

split()和map(Number)

split()和map()一起将输入的一行数字转为数组

let line = '5 6 7 8 9'
console.log(line.split(' '))
console.log(line.split(' ').map(Number))
// ["5", "6", "7", "8", "9"]
// [5, 6, 7, 8, 9]

Map()

使用Map()对输入的数据进行分组
Map 实例的 get() 方法返回该 map 中的指定元素。
Map 实例的 has() 方法返回一个布尔值,指示具有指定键的元素是否存在。
Map 实例的 set() 方法会向 Map 对象添加或更新一个指定的键值对。

set(key, value)

多行输入的情况

第一行一般是之后所有行规格,所以我一般先用一个变量接收第一行用split(' ').map(Number)分割并转换为数字类型
之后的行先在外面定义一个空数组arr,内容的获取放在一个for循环里,直接arr.push(await readline()),根据情况对await readline()获取到的内容进行处理。

一个综合例子

输入:在这里插入图片描述

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void async function () {
    // Write your code here
    let line1 = (await readline()).split(' ').map(Number)
    let n = line1[0]
    let k = line1[1]
    let m = line1[2]
    let apple = 0
    const map =new Map()
    for(let i = 0; i < k; i++){
      let line = (await readline()).split(' ').map(Number)
      // console.log(line)
      if(!map.has(line[0])){
        map.set(line[0],[])
      }
      map.get(line[0]).push(line[1])
    }
    console.log(map)
    map.forEach((key,value) => {
      key.sort((a,b) => a-b)
      if(key[key.length-1] - key[0] < m){
        apple += key.length
      }
      console.log(key,value,apple)

    })
}()

输入输出练习网址:https://www.nowcoder.com/practice/4df606b6c3764d9c969f8759c8a4807b?tpId=372&ru=%2Fexam%2Foj&qru=%2Fta%2Fpr-input-output%2Fquestion-ranking&sourceUrl=%2Fexam%2Foj&difficulty=&judgeStatus=&tags=&title=&gioEnter=menu

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值