著名的斐波那契数列:Fn = Fn-1 + Fn-2 (F1=F2=1),前几个斐波那契数为,1,1,2,3,5,8,13,21….
某一个整数可以拆成若干彼此不同的斐波那契数之和,比如13=13,13=5+8,13=2+3+8;16=1+2+13,16=1+2+5+8,16=3+13,16=3+5+8
现在求解这样一个问题,给定某个数值n,求有多少种方案可以把该数分解成若干彼此不同的斐波那契数之和。
求各位大神帮忙,明天就要交代码了,现在还没思路。。。可以用数组存储吗?
斐波那契数列的应用问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- devmiao 2014-12-14 18:02关注
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { int n = 13; foreach (var item in Resolve(Fibonacci(n).ToArray(), new int[] { 0 }, n)) Console.WriteLine(string.Join(" + ", item.Select(x => x.ToString())) + " = " + n.ToString()); } static IEnumerable<IEnumerable<int>> Resolve(IEnumerable<int> source, IEnumerable<int> cur, int seed) { if (seed == cur.Sum()) return new List<IEnumerable<int>> { cur.Where(x => x > 0) }; return source.Except(cur) .Where(x => x + cur.Sum() <= seed && x > cur.Last()) .SelectMany(x => Resolve(source, cur.Concat(new int[] { x }), seed)); } static IEnumerable<int> Fibonacci(int max) { int m = 1, n = 1; yield return m; while (n <= max) { yield return n; n = n + m; m = n - m; } } } }
2 + 3 + 8 = 13
5 + 8 = 13
13 = 13
Press any key to continue . . .解决 无用评论 打赏 举报
悬赏问题
- ¥15 微信小程序协议怎么写
- ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
- ¥20 怎么用dlib库的算法识别小麦病虫害
- ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
- ¥15 java写代码遇到问题,求帮助
- ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
- ¥15 有了解d3和topogram.js库的吗?有偿请教
- ¥100 任意维数的K均值聚类
- ¥15 stamps做sbas-insar,时序沉降图怎么画
- ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看