设$y=f(x)$是斐波那契数列中最大的不超过x的数,$g(x)$是x的齐肯多夫表示,那么显然有递推关系:
$$g(x)=y+g(x-y)$$
注意$g(0)$为空。根据本题的数据范围,先生成50项斐波那契数,再递归打印输出。
最终代码有四行。
代码长度:168字节 vs. 全站第一:112字节。
import sys,bisect as s
f=[1,1];exec('f+=[f[-1]+f[-2]];'*48)
g=lambda x:[str(y:=f[s.bisect(f,x)-1])]+g(x-y)if x else[]
for a in sys.argv[1:]:print(" + ".join(g(int(a))))
|