题解:三进制+递归拆解
对于一个数字x,它一定可以表示为若干个2的整数幂的和,比如7=22+21+20,但是,它不一定能表示为若干个3的整数幂的和,比如30=33+31,这个是可以表示成若干个3的整数幂的和的,但是对于2这个数字来说,它不能被表示为若干个3的整数幂的和,但是可以被表示为26=33−30
那么我们分析一下:什么样的数字可以被表示为若干个3的整数幂的和,我们设i为3的整数幂的最高次幂,那么它可以表示的最大数字不超过30+31+...+3i=23i+1−1
因此,对于在该范围内的数字,是可以用若干个3的整数幂的和表示的,我们取i=log3(x),那如果有x≥23i+1−1,则我们需要向i+1借一位,然后让x=x−3i+1,然后再递归处理x,注意递归处理时,需要对x取绝对值,然后后面所得到的幂次也需要变换符号,比如加号变成减号,或者减号变成加号。
复杂度分析
在古老的炼金实验室中,你拥有一套神秘的砝码。这些砝码的质量分别是 1,3,9,27,…,即每个质量为 3k(k≥0)的砝码都恰有一枚。现在你需要称量一个质量为 x 的物品。你可以将物品放在天平左盘,并将一些砝码放在左盘,另一些放在右盘,使得天平平衡。若将右盘砝码视为加上其质量,左盘砝码视为减去其质量,则天平平衡等价于所选砝码质量的带符号和等于 x。
请你找出一种称量方案,并按照所用砝码的质量从大到小输出一个表达式:右盘砝码前用 + 号连接,左盘砝码前用 - 号连接(第一项若为正则省略 +)。表达式的计算结果应恰好等于 x。
保证给定的正整数 x 不超过 10^9。
输入包含一行,一个正整数 x,表示物品的质量。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.