算法笔试
练习地址:
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, ...)
不加回车
输出不加回车的参数,空格分隔
print(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 类型。