总结一下在牛客或者leetcode中编写算法,使用JavaScript 语言如何编写的问题:我发现CSDN上很多类似的,但是看了一下,有些是有问题的,感觉照搬过来没有实验过,不实验怎么出真知呢
分析
编写算法题,要自己测试的话,有几种方式都可以:
第一种方式 可用于少量自测,用于测试 简单的算法或者测试输入简单的算法。
第二种方式 也可用户少量自测,或者在牛客或者leetcode里提交代码,进行OJ测试,表现自己的“账号实力”。
第三种方式 自己调控测试的量,也不需要I/O,推荐。
都知道 JavaScript 脚本语言,跑在浏览器里,没有获取I/O的API,无法直接读取用户输入。
但是 nodejs 有:readline模块, V8引擎也有readLine。
输入
输入情况分为以下几种:
以下是对需要 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);
- });

JavaScript(node)
有些朋友类似的文章里,以上的代码是不对的,只有满足条件了之后才应该输出后退出。
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()