[R33A]数字求和

  • 难度 入门
  • 时限 1s
  • 空限 512m
  • 数学

数据规模:123n987123 \le n \le 987,且 nn 的三个数字均不相同且不为 00

思路

设三位数 nn 的三个数字依次为 a,b,ca, b, c。它们的全排列共 3!=63! = 6 个。

对任意一个数字(例如 aa)来说,在百位、十位、个位三个位置上,固定 aa 在某个位置后,剩下的两个数字 b,cb, c 可以任意排列,共 22 种。因此 aa 在每个数位上都恰好出现 22 次。b,cb, c 同理。

于是总和为:

2(a+b+c)×100+2(a+b+c)×10+2(a+b+c)×1=222(a+b+c)2(a+b+c)\times 100 + 2(a+b+c)\times 10 + 2(a+b+c)\times 1 = 222\,(a+b+c)

例:n=123n=123 时,222×(1+2+3)=222×6=1332222\times(1+2+3)=222\times 6=1332

复杂度

时间 O(1)O(1),空间 O(1)O(1)

仓颉实现

import std.env.*
import std.convert.*

main(): Int64 {
    let reader = getStdIn()
    let n = Int64.parse(reader.readln().getOrThrow())
    let a = n / 100
    let b = n / 10 % 10
    let c = n % 10
    println((222 * (a + b + c)).toString())
    return 0
}