「牛客面试编辑器」使用指南
「牛客面试」是助力企业招聘的平台,候选人可以使用「牛客编辑器」展示自己的编码能力,面试官可与候选人实时代码协同、实时交流。
通过阅读本帖,你将了解「牛客编辑器」使用方法和基础功能。
1. 如何处理输入输出?
➡️题目题型
- 面试支持题目类型:核心代码、ACM、SQL编程、前端
ACM模式
-
对于传统“ACM”题目,你的程序需要stdin(标准输入)读取输入和stdout(标准输出)来打印结果
-
举个例子:
- C语言:scanf读取输入,printf输出结果
- C++:cin来读取输入,cout输出结果
-
代码禁止读取和写入任何文件,否则判题系统将会返回运行错误
-
OJ一次处理多个case,所以代码需要循环处理,一般通过while循环来出来多个case。「A+B」题目样例代码: http:/ /www.nowcoder.com/questionTerminal/dae9959d6df7466d9a1f6d70d6a11417
-
核心模式
-
对于“核心模式”题目,你只要完成函数,返回相关的值就可以(return),不需要处理任何输入输出
-
如在函数中使用标准输出打印结果,自测/提交代码后将会展示您的stdout,但不会用于判题
SQL编程
- 不需要处理输入输出,根据题目需求查询结果即可
前端
- 请根据题目描述处理输入输出
➡️各语言标准输入输出示例代码
- C 64位输出请用printf("%lld")
#include <stdio.h> int main() { int a,b; while(scanf("%d %d",&a, &b) != EOF) {//注意while处理多个case printf("%d\n",a+b); } return0; }
- C++ 64位输出请用printf("%lld")
#include <iostream> using namespace std; int main() { int a,b; while(cin >> a >> b)//注意while处理多个case cout << a+b << endl; }
- JAVA
注意类名必须为Main, 不要有任何package xxx信息
注意hasNext和hasNextLine的区别,详细见 <java的oj输入注意点>
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNextInt()) { //注意while处理多个case int a = in.nextInt(); int b = in.nextInt(); System.out.println(a + b); } } }
- Python
import sys try: while True: line = sys.stdin.readline().strip() if line == '': break lines = line.split() print int(lines[0]) + int(lines[1]) except: pass
- Python3
import sys for line in sys.stdin: a = line.split() print(int(a[0]) + int(a[1]))
-
JavaScript(V8)
while(line=readline()){ var lines = line.split(' '); var a = parseInt(lines[0]); var b = parseInt(lines[1]); print(a+b); }
-
JavaScript(Node)
var readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.on('line', function(line){ var tokens = line.split(' '); console.log(parseInt(tokens[0]) + parseInt(tokens[1])); });
- C#
public class Program { public static void Main() { string line; while ((line = System.Console.ReadLine ()) != null) {// 注意,如果输入是多个测试用例,请通过while循环处理多个测试用例 string[] tokens = line.Split(); System.Console.WriteLine(int.Parse(tokens[0]) + int.Parse(tokens[1])); } } }
- Php
<?php while(fscanf(STDIN, "%d %d", $a, $b) == 2) echo ($a + $b)."\n";
- Go
package main import ( "fmt" ) func main() { a:=0 b:=0 for { n, _ := fmt.Scan(&a,&b) if n == 0 { break } else { fmt.Printf("%d\n",a+b) } } }
- R语言
lines=readLines("stdin") for(l in lines){ if(l == ""){ break; } ll = strsplit(l, " ")[[1]] a=ll[1]; b=ll[2]; cat(as.numeric(a)+as.numeric(b)); cat('\n'); }
- Ruby
a, b = gets.split(" ").map {|x| x.to_i} puts (a + b)
- Rust
fn main() { let mut input = String::new(); std::io::stdin().read_line(&mut input).unwrap(); let nums:Vec<&str>= input.trim().split(" ").collect(); let num1: i32 = nums[0].parse().unwrap(); let num2: i32 = nums[1].parse().unwrap(); let sum = num1 + num2; println!("{}\n", sum); }
- Swift
import Foundation while let line = readLine() { let parts = line.split(separator: " ") print(Int(parts[0])! + Int(parts[1])!) }
- ObjectC
#import <Foundation/Foundation.h> int main(int argc,char * argv[]) { NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init]; int a,b; while(scanf("%d %d",&a, &b) != EOF) printf("%d\n",a+b); [pool drain]; return 0; }
- Pascal
var i, j : integer; begin while not eof do begin readln(i, j); writeln(i + j); end; end.
- Matlab
try while 1 line = input('', 's'); lines = strsplit(line); printf("%d\n", str2num(lines{1}) + str2num(lines{2})); end catch end
- Bash
#!/bin/bash read -a arr while [ ${#arr[@]} -eq 2 ] do sum=$((${arr[0]}+${arr[1]})) echo $sum read -a arr done exit 0
2. 代码如何自测?
- 可点击【自测运行】对比测试用例输出和程序实际输出
- 如没有【自测运行】按钮,则表示该题没有系统测试用例,可直接点击【提交运行】对比答案
3. 返回结果各代表什么意思?
- 答案正确: 恭喜!您通过了这道题
- 答案错误: 您的程序未能对评测系统的数据返回正确的结果
- 编译错误:您提交的代码无法完成编译,点击“编译错误”可以看到编译器输出的错误信息
- 等待评测: 评测系统还没有评测到这个提交,请稍候
- 正在为您查询结果: 正在判题,稍候会有结果
- 运行错误: 您提交的程序在运行时发生错误,可能是空指针
- 格式错误: 您的程序输出的格式不符合要求(比如空格和换行与要求不一致)
- 运行超时: 您的程序未能在规定时间内运行结束
- 内存超限: 您的程序使用了超过限制的内存
- 异常退出: 您的程序运行时发生了错误
- 返回非零: 您的程序结束时返回值非 0,如果使用 C 或 C++ 语言要保证 int main 函数最终 return 0
- 浮点错误: 您的程序运行时发生浮点错误,比如遇到了除以 0 的情况
- 段错误 : 您的程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)等情况引起
- 多种错误: 您的程序对不同的测试点出现不同的错误
- 内部错误: 请仔细检查你的代码是否有未考虑到的异常情况,例如非法调用、代码不符合规范等
4. 代码自动补全功能使用
- 「牛客编辑器」支持代码自动补全功能,如代码检查、函数名补全
- 如不需要该功能,可在编辑器顶部位置找到关闭设置
- 注意:设置仅会对当前编辑器生效,不会对其他实时协同的编辑器生效
常见问题
Q:为什么代码在我本机可以通过,提交到牛客网总是提示答案错误
A:牛客网的每个编程题都有10-50组测试数据,你的代码在本机可以通过仅仅是通过了样例数据,可能存在边界条件考虑不周导致更多的测试数据没有通过,所以会返回答案错误。还有一种可能是你的代码没有处理多个测试用例,例如A+B的代码需要while循环处理
#include <stdio.h> int main() { int a,b; while(scanf("%d %d",&a, &b) != EOF) printf("%d",a+b); return 0; }
Q:为什么Java代码在我本机运行正常,提交到牛客网报编译错误
A:因为Java文件名和类名需要保持一致。
1、如果编程题已经提供了类和要编写代码的方法,请不要擅自给方法加上static,也不要擅自修改类的名字。也不要给代码增加任何package信息。
2、对于没有提供任何辅助代码的编程题,请确认类的名字是Main
1、如果编程题已经提供了类和要编写代码的方法,请不要擅自给方法加上static,也不要擅自修改类的名字。也不要给代码增加任何package信息。
2、对于没有提供任何辅助代码的编程题,请确认类的名字是Main
Q:为什么我的代码在本机运行正常,提交到牛客网总是报运行超时
A:牛客网对每个编程题的运行时间都有限制,一般是限制在1秒,牛客网后台判题的机器显然不如的你的台式机强劲,所以碰到超时请尽量优化你的代码效率。当然也有可能是你代码对某个测试用例死循环了
Q:为什么代码会提示答案正确(提交异常)
A:这种情况代码本题你的结果是已AC,但是有点小问题:
1、牛客网对提交的代码会做相似度的判断,如果发现你的代码通过的测试用例同时和已有代码相似度过高则会给出答案正确(提交异常)的提示
2、根据题目的难易程度会对通过代码的提交频率进行控制,如果你提交通过代码的间隔太小,我们也认为有作弊可能,也会提示提交异常
1、牛客网对提交的代码会做相似度的判断,如果发现你的代码通过的测试用例同时和已有代码相似度过高则会给出答案正确(提交异常)的提示
2、根据题目的难易程度会对通过代码的提交频率进行控制,如果你提交通过代码的间隔太小,我们也认为有作弊可能,也会提示提交异常
Q:运行错误是什么情况
A:运行错误一般都是数组越界非法访问,野指针乱访问,空指针乱访问等情况造成代码崩溃
如有其他问题欢迎在下方留言,我们将以最快速度处理您的疑问。
👏欢迎在面试开始前来牛客网提前体验编程环境➡️ https://www.nowcoder.com/activity/oj