目录

序言

第一次用牛客网刷题,我终于搞懂了单行和多行输入

单行输入

var line = readline(); //获得的是一个字符串

//如果需要对其进行处理,比如 “1 2 3 4 5”,想以数组形式获取每个数字
var arr = line.split(" "); // 数组内元素为字符串,eg: arr[0]="1"

多行输入

while(line = readline()){
// #1.如果每一行的操作相同:
  
	// 示例代码
    var lines = line.split(' ')
    var a = parseInt(lines[0])
    var b = parseInt(lines[1])
    print(a + b)
  
//#2. 如果每一行操作不同:
  
/*eg: 第一行给数组长度
	  第二行给用空格分开的字符串
	  那就每一次按照单行输入的方式来获取即可*/
  
    var num = parseInt(readline()) // 获得数组长度
    var arr = readline().split(" ") // 获得数组
}

截取字符串

这道题其实是多行输入且每一次操作不同

截取字符串

有两种做法:

第一种:(推荐)两次单行输入

用两次 readline() 分别读取每行,每次读取后返回一个字符串。

// get input
let str = readline()
let k = parseInt(readline())

// output
print(str.substr(0, k))

第二种:多行输入且每一次操作不同

根据 while (line = radeline()) {do something} 来循环 readline,这样可以避免写多次 readline。

注意:循环体内要写 i++ 保证进行下一次 readline 读取

i代表每次的输入:

  • i 为奇数:表示第一次输入(输入的是字符串)
  • i 为偶数:表示第二次输入(输入的是整数 k
let i = 1
let str = ''
let num = 0
let line

while (line = readline()) {
    //偶数行为数字 
    if(i % 2 === 0) {
        num = parseInt(line) 
        print(str.substring(0,num))
        i++
    //奇数行为字符串 
    } else {
        str = line; 
        i++
    } 
}

输入n个整数,输出其中最小的k个

这道题是典型的多行输入且每次操作不同:输入了两行,需要用两个 readline 分别读取。

输入n个整数,输出其中最小的k个

有两种做法:

第一种:推荐 while (line = radeline()) {do something}

    let input;

    // #1. 第一个 readline() 获取第一行输入
    while (input = readline()) { // 获取输入更方便 ‘5 2’
        // input.split(' ') // ['5', '2']
        let n = Number(input.split(' ')[0]) // 5
        let k = Number(input.split(' ')[1]) // 2
        
        // #2. 第二个 readline() 获取第二行输入 //  '1 3 5 7'
        // trim() 去除字符串的头尾空格
        // readline().trim().split(' ') // ['1', '3', '5', '7']
        let arr = readline().trim().split(' ').map(Number)
      
        // 排序 sor()
        arr.sort((a, b) => {
            return a - b
        });
      
        const res = arr.splice(0 , k).join(' ')
        print(res)
    }

第二种:两次单行输入&排序算法

// get input
const firstLineStr = readline()
const n = parseInt(firstLineStr.split(' ')[0]) // 5
const k = parseInt(firstLineStr.split(' ')[1]) // 2

const secLineStr = readline() // '1 3 5 7 2'
const arr = secLineStr.split(' ') //['1', '3', '5', '7', '2']
arr.map((item, index) => {
    arr[index] = Number(item)
})
// console.log(arr) // [1, 3, 5, 7, 2]

// #SORT SELECTION
// 1. Function to find the index of the smallest value in an array
const findSmallestIndex = (arr) => {
    let smallest = arr[0]
    let smallest_index = 0
    
    for (let i = 1; i < arr.length; i++) {
        if (arr[i] < smallest) {
            smallest = arr[i]
            smallest_index = i
        }
    }
    
    return smallest_index
}

// 2. Use the function above to sort
const selectionSort = (arr) => {
    let newArr = []
    let len = arr.length
    
    for (let i = 0; i < len; i++) {
        let smallest_index = findSmallestIndex(arr)
        newArr.push(arr.splice(smallest_index, 1)[0])
    }
    
    return newArr
}

const newArr = selectionSort(arr) // [1, 2, 3, 5, 7]
const resultArr = newArr.slice(0, k) // [1, 2]
print(resultArr.join(' '))