Skip to content
On this page

算法笔试

练习地址:

https://www.nowcoder.com/test/question/93bc96f6d19f4795a4b893ee16e97654?pid=27976983&tid=55388436

A+B

javascript
var line
while (line = readline()) {
    var lines = line.split(' ');
    var a = parseInt(lines[0]);
    var b = parseInt(lines[1]);
    print(a + b);
}
var line
while (line = readline()) {
    var lines = line.split(' ');
    var a = parseInt(lines[0]);
    var b = parseInt(lines[1]);
    print(a + b);
}

2

javascript
let n = parseInt(readline())
for (let i = 0; i < n; i++) {
    let line = readline().split(' ')
    let a = parseInt(line[0])
    let b = parseInt(line[1])
    console.log(a + b)
}
let n = parseInt(readline())
for (let i = 0; i < n; i++) {
    let line = readline().split(' ')
    let a = parseInt(line[0])
    let b = parseInt(line[1])
    console.log(a + b)
}

3

javascript
while(line = readline()){
    let arr = line.split(' ')
    let a = parseInt(arr[0])
    let b = parseInt(arr[1])
    if(a!==0||b!==0){
        console.log(a+b)
    }
}
while(line = readline()){
    let arr = line.split(' ')
    let a = parseInt(arr[0])
    let b = parseInt(arr[1])
    if(a!==0||b!==0){
        console.log(a+b)
    }
}

4

javascript
while(true){
     let arr = readline().split(' ').map(Number)
     if(arr[0] === 0){
         break
     }
    let ans = 0
    for(let i=1; i<=arr[0]; i++){
        ans += arr[i]
    }
    console.log(ans)
}
while(true){
     let arr = readline().split(' ').map(Number)
     if(arr[0] === 0){
         break
     }
    let ans = 0
    for(let i=1; i<=arr[0]; i++){
        ans += arr[i]
    }
    console.log(ans)
}

5

javascript
let n = parseInt(readline())

for(let i = 0; i < n; i++) {
    const arr = readline().split(' ').map(Number)
    let sum = 0
    const [a, ...resp] = arr;
    for(let i = 0; i < a; i++){
        sum+=resp[i]
    }
    console.log(sum)
}
let n = parseInt(readline())

for(let i = 0; i < n; i++) {
    const arr = readline().split(' ').map(Number)
    let sum = 0
    const [a, ...resp] = arr;
    for(let i = 0; i < a; i++){
        sum+=resp[i]
    }
    console.log(sum)
}

6

javascript
while(line=readline()){
    let sum = 0;
    const [n, ...resp] = line.split(' ').map(Number)
    for(let i = 0;i<n;i++){
        sum+=resp[i]
    }
    console.log(sum)
}
while(line=readline()){
    let sum = 0;
    const [n, ...resp] = line.split(' ').map(Number)
    for(let i = 0;i<n;i++){
        sum+=resp[i]
    }
    console.log(sum)
}

7

javascript
let line;
while(line=readline()){
    const arr = line.split(' ').map(Number)
    if(arr.every(i=>i===0)){
        break
    }
    const res = arr.reduce((a, b)=>a+b, 0)
    console.log(res)
}
let line;
while(line=readline()){
    const arr = line.split(' ').map(Number)
    if(arr.every(i=>i===0)){
        break
    }
    const res = arr.reduce((a, b)=>a+b, 0)
    console.log(res)
}

字符串排序1

javascript
let n = parseInt(readline()) // 没啥用,只是拿出来占位
let arr = readline().split(' ')
arrSort = arr.sort()
console.log(arrSort.join(' '))
let n = parseInt(readline()) // 没啥用,只是拿出来占位
let arr = readline().split(' ')
arrSort = arr.sort()
console.log(arrSort.join(' '))

字符串排序2

javascript
while(line=readline()){
    const arr = line.split(' ')
    console.log(arr.sort().join(' '))
}
while(line=readline()){
    const arr = line.split(' ')
    console.log(arr.sort().join(' '))
}

字符串排序3

javascript
while (line = readline()) {
    console.log(line.split(',').sort().join(','))
}
while (line = readline()) {
    console.log(line.split(',').sort().join(','))
}

总结

  • 输入数组
    • 一定要记得转字符串到number
javascript
let arr = [];
let line;
while ((line = read_line()) != "") {
    arr.push(line.split(' ').map(v=>parseInt(v)));
}
let arr = [];
let line;
while ((line = read_line()) != "") {
    arr.push(line.split(' ').map(v=>parseInt(v)));
}

输入API

read_line()

  • 将读取至多1024个字符,当还未达到1024个时如果遇到回车或结束符,提前结束。
  • 读取多行最简单的办法是 while((line = read_line()) != '')

gets(n)

  • 将读取至多n个字符,当还未达到n个时如果遇到回车或结束符,会提前结束。
  • 回车符可能会包含在返回值中。
  • 如果字符串末尾不应该是回车符的话,

readInt()

读取(长)整数

readDouble()

读取浮点数

输出API

printsth(a, ...) 不加回车

输出不加回车的参数,空格分隔

输出加回车的参数,空格分隔

console.log(a, ...) 加回车

输出加回车的参数,空格分隔

示例

javascript
var a, b;
var solveMeFirst = (a,b) => a+b;
while((a=readInt())!=null && (b=readInt())!=null){
    let c = solveMeFirst(a, b);
    print(c);
}
var line;
var solveMeFirst = (a,b) => a+b;
while((line = read_line()) != ''){
    let arr = line.split(' ');
    let a = parseInt(arr[0]);
    let b = parseInt(arr[1]);
    let c = solveMeFirst(a, b);
    print(c);
}
var a, b;
var solveMeFirst = (a,b) => a+b;
while((a=readInt())!=null && (b=readInt())!=null){
    let c = solveMeFirst(a, b);
    print(c);
}
var line;
var solveMeFirst = (a,b) => a+b;
while((line = read_line()) != ''){
    let arr = line.split(' ');
    let a = parseInt(arr[0]);
    let b = parseInt(arr[1]);
    let c = solveMeFirst(a, b);
    print(c);
}

矩阵

情况一:输入的矩阵用空格分隔数字,没有[]和,

输入一个矩阵:每行以空格分隔。

3 2 3

1 6 5

7 8 9

javascript
// 输入
let arr = [];
let line;
while ((line = read_line()) != "") {
    arr.push(line.split(' ').map(v=>parseInt(v)));
}
// 调试时输出:使用自测数据按钮时调试用,正式提交时要删掉。
for (let i=0; i<arr.length; i++) {
    for (let j=0; j<arr[i].length; j++) {
        printsth(arr[i][j], ' ');
    }
    print();
}
// 输入
let arr = [];
let line;
while ((line = read_line()) != "") {
    arr.push(line.split(' ').map(v=>parseInt(v)));
}
// 调试时输出:使用自测数据按钮时调试用,正式提交时要删掉。
for (let i=0; i<arr.length; i++) {
    for (let j=0; j<arr[i].length; j++) {
        printsth(arr[i][j], ' ');
    }
    print();
}

情况二:输入的矩阵带有中括号和逗号

[[3,2,3],

[1,6,5],

[7,8,9]]

对于这种没有给定矩阵行列数的输入,而且还包含中括号和逗号的输入,我们也是只能按照字符串拆分来进行。

javascript
// 输入:
let arr = [];
let line;
while ((line = read_line()) != "") {
    // 字符串中replace四种:  ],	  [		]  空格
    arr.push(line.replace(/\]\,/g, "").replace(/ /g, "").replace(/\[/g, "").replace(/\]/g, "").split(",").map(v=>parseInt(v)));
}

// 调试时输出:使用自测数据按钮时调试用,正式提交时要删掉。
for (let i=0; i<arr.length; i++) {
    for (let j=0; j<arr[i].length; j++) {
        printsth(arr[i][j], ' ');
    }
    print();
}
// 输入:
let arr = [];
let line;
while ((line = read_line()) != "") {
    // 字符串中replace四种:  ],	  [		]  空格
    arr.push(line.replace(/\]\,/g, "").replace(/ /g, "").replace(/\[/g, "").replace(/\]/g, "").split(",").map(v=>parseInt(v)));
}

// 调试时输出:使用自测数据按钮时调试用,正式提交时要删掉。
for (let i=0; i<arr.length; i++) {
    for (let j=0; j<arr[i].length; j++) {
        printsth(arr[i][j], ' ');
    }
    print();
}

情况三:要求输出矩阵/数组带有中括号和逗号

javascript
let arr = [[1,2,3],[4,5,6]]
console.log(arr.toString())
// 输出是:1,2,3,4,5,6
// 这样就错了,没有中括号

console.log(JSON.stringify(arr));
// 这样是对的,可以输出数组和矩阵

// 输出矩阵,这样也是可以的
printsth('[');
for (let i=0; i<arr.length; i++) {
    printsth('[');
    printsth(arr[i].join(', '));
    printsth(']');
    if (i < arr.length - 1)
        printsth(', ');
}
print(']');
let arr = [[1,2,3],[4,5,6]]
console.log(arr.toString())
// 输出是:1,2,3,4,5,6
// 这样就错了,没有中括号

console.log(JSON.stringify(arr));
// 这样是对的,可以输出数组和矩阵

// 输出矩阵,这样也是可以的
printsth('[');
for (let i=0; i<arr.length; i++) {
    printsth('[');
    printsth(arr[i].join(', '));
    printsth(']');
    if (i < arr.length - 1)
        printsth(', ');
}
print(']');

JS读取超长字符串

由于read_line()只能读取1024个字符,所以如果题目中的用例涉及到长度大于1024字符串的,需要用到gets(n)这个函数。

超过1024个字符的情况下:

javascript
// 如果实际输入的字符长度为slen, slen < 10000,那么gets获取的字符串会再其后加一个回车符,令输入的字符串长度为slen + 1
// 因此,假如字符串中不应该包含空白符的话,应该使用 .trim()
// 注意,trim会将字符串头尾的回车、空格等空白符都删除。
let line = gets(10000).trim();
print(line.length);
// 如果实际输入的字符长度为slen, slen < 10000,那么gets获取的字符串会再其后加一个回车符,令输入的字符串长度为slen + 1
// 因此,假如字符串中不应该包含空白符的话,应该使用 .trim()
// 注意,trim会将字符串头尾的回车、空格等空白符都删除。
let line = gets(10000).trim();
print(line.length);

trim()

  • 方法用于删除字符串的头尾空白符,空白符包括:空格、制表符 tab、回车、换行符 等其他空白符等。
  • 不适用于 null, undefined, Number 类型。