青训营-小R的三的倍数分解
问题描述
小R拿到了一些正整数,这些正整数都是3的倍数。他需要将每一个数$n$分解为三个3的倍数,并且每种分解方法的顺序不同也视为不同的分解方式。你的任务是帮助小R计算每个$n$可以分解成三个3的倍数的方法数。如果某个数无法分解,则返回0。需要注意的是,分解出的每个数都不能为0。
测试样例
样例1:
输入:
n = 9
输出:1
样例2:
输入:
n = 12
输出:3
解答:
1 |
|
解答思路
我们需要将
n
分解成三个正整数,且每个数都必须是3
的倍数,且不为零。假设我们将
n
分解为三个数a, b, c
,使得:a+b+c=n 且每个数
a, b, c
都是3
的倍数。所以,问题转化为:
3*(x+y+z)=n 即
x+y+z=3/n
,其中,x, y, z
都是正整数。现在,我们需要找到
x + y + z = m
的正整数解的个数,其中m = n / 3
。对于方程
x + y + z = m
,其中x, y, z
是正整数,该解的个数为C(m - 1, 2)
,即从m-1
中选择 2 个分隔符。
异常实例处理
- 当
n
不能被 3 整除时,无法分解成三个3
的倍数,返回0
。 - 当
m = n / 3
小于 3时,即无法分解为三个正整数 3 的倍数,返回0
。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Xielei's Blog!