[R12B] 减法游戏
- 难度 入门
- 时限 1s
- 空限 512m
- 模拟数学
数据规模:。
思路
直接按题意用 while 循环模拟:两数不相等时,较大者得一分并减去对方的数字,直到相等为止。得分分别累计在甲的得分和乙的得分中。
复杂度:时间 ,空间 。极限数据(如 )约 轮,完全在时限内。
仓颉实现
import std.env.*
import std.convert.*
main(): Int64 {
let reader = getStdIn()
let ab = reader.readln().getOrThrow().split(" ", removeEmpty: true).map({ p => Int64.parse(p) })
var a = ab[0]
var b = ab[1]
var sa: Int64 = 0
var sb: Int64 = 0
while (a != b) {
if (a > b) {
sa = sa + 1
a = a - b
} else {
sb = sb + 1
b = b - a
}
}
let out = StringBuilder()
out.append(sa)
out.append(" ")
out.append(sb)
println(out.toString())
return 0
}
要点:
- 循环中同一轮内「加分」和「改数」是原子操作,不存在两人同时加分的情况,因为 时必有大小关系。
- 输出用
StringBuilder拼接两个得分,避免行尾多余空格。