ACM 模式练习记录 Vol.1

Vol.1 主要是练习在 ACM 模式下的输入输出。

OJ在线编程常见输入输出练习场

1. A + B (1)

1
2
3
计算 a+b
输入包括两个正整数a,b(1 <= a, b <= 1000),输入数据包括多组。
输出 a+b 的结果

解法:

JavaScript V8

1
2
3
4
5
6
7
8
9
let print = console.log
while(ln = readline()){
let lns = ln.split(' ')
let res = 0
for (let i = 0; i < lns.length; i++){
res += parseInt(lns[i])
}
print(res)
}

2. A + B (2)

1
2
3
4
计算 a+b
输入第一行包括一个数据组数 t(1 <= t <= 100)
接下来每行包括两个正整数 a,b(1 <= a, b <= 1000)
输出 a+b 的结果

解法

JavaScript V8

1
2
3
4
5
6
7
8
9
10
let print = console.log
let lngrp = readline()
while(ln = readline()){
let lns = ln.split(' ')
let res = 0
for (let i = 0; i < lns.length; i++){
res += parseInt(lns[i])
}
print(res)
}

3. A + B (3)

1
2
3
计算 a+b
输入包括两个正整数a,b(1 <= a, b <= 10^9),输入数据有多组, 如果输入为0 0则结束输入
输出 a+b 的结果

解法

JavaScript V8

1
2
3
4
5
6
7
8
9
10
let print = console.log
while(ln = readline()){
let lns = ln.split(' ')
let res = 0
let a = parseInt(lns[0]), b = parseInt(lns[1])
if(a == 0 && b == 0) {
break
}
else print(a+b)
}

4. A + B (4)

1
2
3
4
5
计算一系列数的和
输入数据包括多组。
每组数据一行,每行的第一个整数为整数的个数n(1 <= n <= 100), n为0的时候结束输入。
接下来n个正整数,即需要求和的每个正整数。
每组数据输出求和的结果

解法

JavaScript V8

1
2
3
4
5
6
7
8
9
10
11
12
13
let print = console.log
while(ln = readline()){
let lns = ln.split(' ')
if (lns[0] == 0) {
break
} else {
let res = 0
for (let i = 1; i < lns.length; i++){
res += parseInt(lns[i])
}
print(res)
}
}

5. A + B (5)

1
2
3
4
5
6
计算一系列数的和
输入的第一行包括一个正整数t(1 <= t <= 100), 表示数据组数。
接下来t行, 每行一组数据。
每行的第一个整数为整数的个数n(1 <= n <= 100)。
接下来n个正整数, 即需要求和的每个正整数。
每组数据输出求和的结果

解法

JavaScript V8

1
2
3
4
5
6
7
8
9
10
let print = console.log
let lngrp = readline()
while(ln = readline()){
let lns = ln.split(' ')
let res = 0
for (let i = 1; i < lns.length; i++){
res += parseInt(lns[i])
}
print(res)
}

6. A + B (6)

1
2
3
4
5
计算一系列数的和
输入数据有多组, 每行表示一组输入数据。
每行的第一个整数为整数的个数n(1 <= n <= 100)。
接下来n个正整数, 即需要求和的每个正整数。
每组数据输出求和的结果

解法

JavaScript V8

1
2
3
4
5
6
7
8
9
let print = console.log
while(ln = readline()){
let lns = ln.split(' ')
let res = 0
for (let i = 1; i < lns.length; i++){
res += parseInt(lns[i])
}
print(res)
}

7. A + B (7)

1
2
3
4
计算一系列数的和
输入数据有多组, 每行表示一组输入数据。
每行的第一个整数为整数的个数n(1 <= n <= 100)。
每组数据输出求和的结果

解法

JavaScript V8

1
2
3
4
5
6
7
8
9
10
11
12
let print = console.log
while(ln = readline()){
let lns = ln.split(' ')
let res = 0
for (let i = 0; i < lns.length; i++){
if (lns[i] == 0) break
else {
res += parseInt(lns[i])
}
}
print(res)
}

8. 字符串排序

1
2
3
4
对输入的字符串进行排序后输出 
输入有两行,第一行n
第二行是n个字符串,字符串之间用空格隔开
输出一行排序后的字符串,空格隔开,无结尾空格

解法

JavaScript V8

1
2
3
4
5
let print = console.log
let num = readline()
let str = readline()
let arr = str.split(' ')
print(arr.sort().join(' '))

9. 字符串排序

1
2
3
4
对输入的字符串进行排序后输出 
多个测试用例,每个测试用例一行。
每行通过空格隔开,有n个字符,n<100
对于每组测试用例,输出一行排序过的字符串,每个字符串通过空格隔开

解法

JavaScript V8

1
2
3
4
5
let print = console.log
while(str = readline()){
let arr = str.split(' ')
print(arr.sort().join(" "))
}

10. 字符串排序

1
2
3
4
对输入的字符串进行排序后输出 
多个测试用例,每个测试用例一行。
每行通过,隔开,有n个字符,n<100
对于每组用例输出一行排序后的字符串,用','隔开,无结尾空格

解法

JavaScript V8

1
2
3
4
5
let print = console.log
while(str = readline()){
let arrs = str.split(',')
print(arrs.sort().join(','))
}

11. 总结

LeetCode 的编码模式和赛码网、牛客网上的完全不同,LeetCode 上的编码模式为核心代码模式, 赛码、牛客上的编码模式均为 ACM 模式,随着越来越多企业在牛客和赛码上作为笔试编程平台,ACM 编码模式也越来越得到重视。

与核心代码模式不同,ACM 模式需要自己处理输入和输出数据,以至于我之前做秋招笔试题的时候非常不适应,就是搞不懂输入和输出的处理,就约等于交白卷。

一般来说 ACM 模式都会给出一到两个测试用例,就像下面这样:

01

这里的输入 每一行为一个输入单位,输出与每一行的输入数据相对应。要使用每行的数据,需要读取每一行的数据,此时数据还是字符串,需要转化为具体的数据类型才能计算,这个模式更侧重于考察基本语法和输入输出的理解。

核心代码模式给出的测试用例就像这样:

02

连变量名和什么数据都给的非常清楚,这个模式更重在考察算法的逻辑。

编码练习其实偏重哪个模式来训练都不是很好,还是建议按比例练习不同的编码模式,效果会更好一些。