【备战秋招】7月20日-科大讯飞-第三题-数字拆分问题

在线测试本题

数字拆分问题

问题描述

众所周知,任何一个数 n n n 可以拆分为若干项,这些项是不同的,由 2 2 2 的次幂和 3 3 3 的次幂相乘之和组成,即:

n = ∑ i = 1 m ( 2 a i ⋅ 3 b i ) n = \sum_{i=1}^{m} (2^{a_i} \cdot 3^{b_i}) n=i=1m(2ai3bi)

且对于所有 i i i j j j ,满足 2 a i 3 b i ≠ 2 a j 3 b j 2^{a_i}3^{b_i} \neq 2^{a_j}3^{b_j} 2ai3bi=2aj3bj

塔子哥给你这个整数 n n n,希望你能找到这样两个长度为 m m m 的序列 A A A B B B 满足给出的方程( 2 a 1 3 b 1 , 2 a 2 3 b 2 , . . . , 2 a m 3 b m 2^{a_1}3^{b_1},2^{a_2}3^{b_2},...,2^{a_m}3^{b_m} 2a13b1,2a23b2,...,2am3bm),并且按照由大到小的顺序依次输出。

输入描述

每个测试文件均包含多组测试数据。第一行输入一个整数 T T T 1 < T < 100 1 < T < 100 1<T<100),代表数据组数。每组测试数据描述如下:在一行上输入一个整数 n n n 1 ≤ n ≤ 1 0 9 1 \leq n \leq 10^9 1n109),代表给定的初始数字。

输出描述

对于每一组测试数据,第一行输出一个整数 m m m 1 ≤ m < 1 0 9 1 \leq m < 10^9 1m<109),代表序列的项数。第二行输出 m m m 个不同的整数 2 a 1 3 b 1 , 2 a 2 3 b 2 , . . . , 2 a m 3 b m 2^{a_1}3^{b_1},2^{a_2}3^{b_2},...,2^{a_m}3^{b_m} 2a13b1,2a23b2,...,2am3bm,代表拆出的序列,并由大到小依次输出。

样例输入

5
10
15
123
3
321

样例输出

2
8 2
2
12 3
3
96 24 3
1
3
4
288 24 6 3

样例解释

  1. 对于 n = 10 n = 10 n=10,可以拆分为 8 + 2 8 + 2 8+2,其中 8 = 2 3 ⋅ 3 0 8 = 2^3 \cdot 3^0 8=2330 2 = 2 1 ⋅ 3 0 2 = 2^1 \cdot 3^0 2=2130
  2. 对于 n = 15 n = 15 n=15,可以拆分为 12 + 3 12 + 3 12+3,其中 12 = 2 2 ⋅ 3 1 12 = 2^2 \cdot 3^1 12=2231 3 = 2 0 ⋅ 3 1 3 = 2^0 \cdot 3^1 3=2031
  3. 对于 n = 123 n = 123 n=123,可以拆分为 96 + 24 + 3 96 + 24 + 3 96+24+3,其中 96 = 2 5 ⋅ 3 1 96 = 2^5 \cdot 3^1 96=2531 24 = 2 3 ⋅ 3 1 24 = 2^3 \cdot 3^1 24=2331 3 = 2 0 ⋅ 3 1 3 = 2^0 \cdot 3^1 3=2031
  4. 对于 n = 3 n = 3 n=3,可以直接表示为 3 = 2 0 ⋅ 3 1 3 = 2^0 \cdot 3^1 3=2031
  5. 对于 n = 321 n = 321 n=321,可以拆分为 288 + 24 + 6 + 3 288 + 24 + 6 + 3 288+24+6+3,其中 288 = 2 5 ⋅ 3 2 288 = 2^5 \cdot 3^2 288=2532 24 = 2 3 ⋅ 3 1 24 = 2^3 \cdot 3^1 24=2331 6 = 2 1 ⋅ 3 1 6 = 2^1 \cdot 3^1 6=2131 3 = 2 0 ⋅ 3 1 3 = 2^0 \cdot 3^1 3=2031

题解

这题题目要求 2 a i 3 b i ≠ 2 a j 3 b j 2^{a_i}3^{b_i} \neq 2^{a_j}3^{b_j} 2ai3bi=2aj3bj

那我们直接令所有的 b = 0 b = 0 b=0,题目就变成了将一个 n n n 转成 2 a i + 2 a i + 1 . . . 2 ^ {a_i} + 2 ^ {a_{i + 1}} ... 2ai+2ai+1...,成了一个简单的二进制转换问题。

由于 a i a_i ai b i b_i bi 的数量很有限,那么其 a i b i a_ib_i aibi 的组合数量也不多。

于是塔子哥猜测,出题人原本不是想考察这个。而是更像考察物品数量比较少,且背包容量比较大的,01背包恰好装满问题,这个可以用 最短路优化背包 的方法解决,但由于在笔试中这个难度有点超纲了,感兴趣的朋友可以自行了解。

代码见网站内部(文章顶部):塔子哥的文字题解

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

塔子哥学算法

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值