目录
序言
第一次用牛客网刷题,我终于搞懂了单行和多行输入。
单行输入
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 分别读取。
有两种做法:
第一种:推荐 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(' '))