[R34A]FizzBuzz 游戏
- 难度 入门
- 时限 1s
- 空限 512m
- 模拟
数据规模:,,。
思路
不需要真正构造字符串,只关心字符 z 的总数。对每个 用两次取模判断它是不是 、 的倍数:
- 同时是 和 的倍数,对应
FizzBuzz,贡献 个z; - 仅是其中之一的倍数,对应
Fizz或Buzz,贡献 个z; - 两者都不是,保持数字不变,贡献 。
逐项累加即可。(题面样例解释里把 Buzz 误写成 Bizz,但 Buzz 同样有 个 z,不影响计数。)
复杂度
时间 ,空间 存数组(也可边读边算做到 )。
仓颉实现
import std.console.*
import std.convert.*
main(): Int64 {
let reader = Console.stdIn
let header = reader.readln().getOrThrow().split(" ", removeEmpty: true).map({ p: String => Int64.parse(p) })
let n = header[0]
let x = header[1]
let y = header[2]
let a = reader.readln().getOrThrow().split(" ", removeEmpty: true).map({ p: String => Int64.parse(p) })
var ans: Int64 = 0
var i = 0
while (i < n) {
let v = a[i]
let mx = v % x == 0
let my = v % y == 0
if (mx && my) {
ans += 4
} else if (mx || my) {
ans += 2
}
i++
}
println(ans)
return 0
}