怎么在 OJ 上用 JavaScript 写算法题,赶快学起来~
总结一下在牛客或者leetcode中编写算法,使用JavaScript 语言如何编写的问题:
我发现CSDN上很多类似的,但是看了一下,有些是有问题的,感觉照搬过来没有实验过,不实验怎么出真知呢
分析
编写算法题,要自己测试的话,有几种方式都可以:
- 1:提前将要测试的数据写在变量里,不用读取I/O。
- 2:在控制台里输入 要测试的数据,需要用到I/O。
- 3:使用自己的对数器来测试,不用读取I/O。
第一种方式 可用于少量自测,用于测试 简单的算法或者测试输入简单的算法。
第二种方式 也可用户少量自测,或者在牛客
或者leetcode
里提交代码,进行OJ测试,表现自己的“账号实力”。
第三种方式 自己调控测试的量,也不需要I/O,推荐。
都知道 JavaScript 脚本语言,跑在浏览器里,没有获取I/O的API,无法直接读取用户输入。
但是 nodejs 有:readline
模块, V8引擎也有readLine
。
输入
输入情况分为以下几种:
- 1:输入一行
- 2:N+1行输入
以下是对需要 OJ 测试的代码的规范:
JavaScript(v8)
/* readline() 读取一行输入,需要读取多少行写多少个
print() 输出
*/
(function(){
let a = readline().trim(),b = readline().trim();
// 编码
print('res')
})();
JavaScript(Node)
1、单行输入,然后算法实现,然后输出。
// 使用node.js的输入接口
const readline = require('readline');
// I/O
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
// 监听控制台的输入
rl.on('line', function(line) {
var data = line.trim() //拿到控制台输入
//编码
console.log(result); //输出结果
// 结束进程
process.exit(0);
});
2、多行输入,第一行N作为接下来输入的行数。
代码如下
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
var N = -1; // 接收第一行数据
var rows = []; //用于存储接下来每行的输入
rl.on('line', function(line) {
if (N < 0) {
N = parseInt(line.trim()); //读取第一行
} else {
rows.push(line.trim()); //将每次输入的行数据存入
if (N == rows.length) {
// 编码
console.log(N, rows); //输出
// 触发'close'事件,结束进程。或者直接写:process.exit(0);
rl.close()
}
}
});
rl.on('close', function() {
process.exit(0);
});
有些朋友类似的文章里,以上的代码是不对的,只有满足条件了之后才应该输出后退出。
3、第一行输入值N作为第二行的以空格隔开的元素个数
//前面的不变
let rows = []; //用于存储接下来每行的输入
rl.on('line', function(line) {
rows.push(line.trim()); //将每次输入的行数据存入
if (2 == rows.length) { // 行数在此
let N = rows[0], list = rows[1].split(' '), res=[];
// 编码
console.log( res.join(' ')); //输出
process.exit(0);
}
});
另外,其他语言的 OJ 格式我列出几个,有不对的地方请指出:
Java 编码规范:
/* new Scanner(System.in) 获取输入
System.out.println() 输出
*/
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str1 = scanner.nextLine();
String str2 = scanner.nextLine();
scanner.close();
// 编码
System.out.println('xx');
}
}
C 编码规范
/* gets() 获取输入
* printf() 输出
*/
#include <stdio.h>
#include <string.h>
#define N 50
int main() {
char s1[N],s2[N];
gets(s1);
gets(s2);
int res = 0;
// 编码
printf("%d\n", res)
return 0;
}
C++ 编码规范
/* getline(cin, a); 读取输入
cout<<res<<endl; 输出
*/
#include<iostream>
using namespace std;
int main() {
string a,b;
getline(cin,a);
getline(cin,b);
int res = 0;
// 编码
cout<<res<<endl;
return 0;
}
Python 编码规范
'''
input() 读取输入
print() 输出
'''
def solution:
a=input()
b=input()
# 编码
print('xx')
solution()