前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >前端笔试之JavaScript ACM模式

前端笔试之JavaScript ACM模式

作者头像
赤蓝紫
发布2023-03-16 15:21:50
3.4K0
发布2023-03-16 15:21:50
举报
文章被收录于专栏:clz

前端笔试之JavaScript ACM模式

前言

相信很多小伙伴刷算法题,都是用力扣。但是,力扣是核心代码模式,是不需要处理输入、输出的,只需要直接返回值就行。笔试、面试的时候,不一定是核心代码模式,也可能是ACM模式。如果没有了解过JavaScript的输入输出可能就寄了。(本人就试过突然ACM模式笔试,后面不知道怎么输入输出,直接重操旧业,用C++来做题😂)

祝看到这篇文章并且在找工作的,顺顺利利拿到心仪的offer。(包括本人🐶)

JavaScript的ACM模式会有两种:V8模式Nodejs模式

V8模式

输出

console.log();

这个就没啥好说的了,学JavaScript还不认识这个的话,就太尴尬了。

读取一行输入(read_line())

最多读取个字符,当还未达到1024个时如果遇到回车或结束符,提前结束。也有可能是readline()。牛客ACM模式就是readline()

\color{red}最重要的一个输入方法,可以通过该方法得到所有情况的输入,后面讲的其他输入方法,有可能没有。比如牛客的ACM模式,使用后面的输入,都会报错:xxx is not defined

read_line()返回输入的一行,字符串形式。需要通过splitparseInt等方法来得到真正的输入。(这里确实比C++那些要麻烦得多)

练习

题目来源:OJ在线编程常见输入输出练习场J

\color{red}题目来源是牛客,但是练习是在赛码上练的,因为牛客提供的输入API少很多。

1. A+B(1)

代码语言:javascript
复制
let line;
while(line = read_line()) {
    let nums = line.split(' ');

    let a = +nums[0];    // 将字符串转为数字
    let b = +nums[1];

    console.log(a + b);
}
2. A+B(2)
代码语言:javascript
复制
let t;

while(t = +read_line()) {
  while(t--) {
    let line = read_line();

    let [a, b] = line.split(' ').map(Number);

    console.log(a + b);
  }
}
3. A+B(4)
代码语言:javascript
复制
let line;
while(line = read_line()) {
  let [n, ...nums] = line.split(' ').map(Number);

  if(n === 0) {
      break;
  }

  let sum = 0;

  for(let i = 0; i < n; i++) {
      sum += nums[i];
  }

  console.log(sum);
}
4. A+B(5)
代码语言:javascript
复制
let t;

while(t = +read_line()) {
  console.log()
  while(t--) {
    let [n, ...nums] = read_line().split(' ').map(Number)

    let sum = 0;
    for(let i = 0; i < n; i++) {
        sum += nums[i];
    }

    console.log(sum);
  }
}

读取一个整数(readInt())

根据平台的不同,有可能不提供该接口,比如牛客网。

练习

A+B(1)

代码语言:javascript
复制
let a;
let b;

while((a = readInt()) && (b = readInt())) {
    console.log(a + b);
}

正所谓,术业有专攻,很明显,有的时候直接用readInt()会比read_line()方便很多。(当然前提是你做题的平台有提供这个接口才行)

读取一个浮点型(readDouble)

readInt()基本一致。

代码语言:javascript
复制
let a;
let b;

while((a = readDouble()) && (b = readDouble())) {
    console.log(a + b);
}

最多读取n个字符,当没有达到n个时,如果遇到回车或结束符,会提前结束。

读取n个字符(gets(n))

因为read_line()只能读取1024个字符,所以如果输入长度大于1024个字符的字符串的话,就轮到gets(n)函数大显神通了。

代码语言:javascript
复制
let n;

while(n = +read_line()) {
  let str = gets(n);
  console.log(str + ' - clz');
}

如果题目备注字符串的长度范围为1到10000。 那么读取输入应该是gets(10000)

Nodejs模式

Nodejs输入主要有三大步骤:

  1. 引入readline模块
  2. 调用readline.createInterface(),创建一个readline的接口实例
  3. 监听line事件,事件处理函数的参数就是输入的行
代码语言:javascript
复制
const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
rl.on('line', function (line) {
    // 
});

练习

代码语言:javascript
复制
const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
rl.on('line', function (line) {
  let nums = line.split(' ');

  if(nums && nums.length == 2) {
    // 这里加上这个条件是因为在赛码平台上,输入结束还会触发一次,line是空行
    // 吐个槽:牛客输入结束不会再触发一次。真服了,每个平台都有自己的一套规则

    let a = +nums[0];
    let b = +nums[1];

    console.log(a + b);
  }
});

小贴士

输出指定位数使用toFixed(n)函数(四舍五入)

代码语言:javascript
复制
let a = 1 / 6;

console.log(a.toFixed(3));    // 0.167

参考

ACMcoder OJ

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前端笔试之JavaScript ACM模式
    • 前言
      • V8模式
        • 输出
        • 读取一行输入(read_line())
        • 读取一个整数(readInt())
        • 读取一个浮点型(readDouble)
        • 读取n个字符(gets(n))
      • Nodejs模式
        • 练习
      • 小贴士
        • 参考
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档