我正在通过Project Euler页面上的问题2工作
Fibonacci序列中的每个新术语都是通过添加 前两个任期。从1和2开始,前10个术语将 be:1,2,3,5,8,13,21,34,55,89,...考虑中的条款 发现,斐波那契序列的值不超过四百万 偶数项的总和。
在我总结所有偶数之前,我想生成一个列表。
我创建了以下方法:
static List<int> Fibonacci(int n)
{
int a = 0;
int b = 1;
var list = new List<int>();
for (int i = 0; i < n; i++)
{
int temp = a;
a = b;
b = temp + b;
list.Add(a);
}
return list;
}
static List<int> ListEvenFibonacci(int n)
{
var list = Fibonacci(n);
var evenList = new List<int>();
for (int i = 0; i < list.Count; i++)
{
if (IsEvan(list.ElementAt(i)))
{
evenList.Add(i);
}
}
return evenList;
}
static bool IsEvan(int n)
{
if (n % 2 == 0)
{
return true;
}
else
{
return false;
}
}
在我的主要功能中,我打印出偶数列表,以确保它的工作方式如下:
static void Main(string[] args)
{
var List = ListEvenFibonacci(15);
for (int i = 0; i < List.Count; i++)
{
Console.WriteLine(List[i]);
}
}
但是,我得到的输出不正确:
2
5
8
11
14
答案 0 :(得分:2)
我建议实现生成器,然后在 Linq 的帮助下执行查询:
private static IEnumerable<long> Fibo(long first, long second) {
long prior = first;
long last = second;
yield return prior;
yield return last;
while (true) {
long next = prior + last;
yield return next;
prior = last;
last = next;
}
}
...
long result = Fibo(1, 2)
//.Where((value, index) => index % 2 == 0) // if we want even indexes (zero based!)
.Where(value => value % 2 == 0) // if we want even values
.TakeWhile(value => value <= 4000000) // items not exceed 4e6
.Sum();
Console.Write(result);
结果: 4613732
答案 1 :(得分:1)
您正在添加迭代变量,而不是列表元素本身。
evenList.Add(i);
应该是
evenList.Add(list[i]);
答案 2 :(得分:0)
不保存偶数索引。将数字保存在这样的索引处。
for (int i = 0; i < list.Count; i++)
{
if (IsEvan(list.ElementAt(i)))
evenList.Add(list.ElementAt(i));
}
对于偶数值的总和
int sum = 0;
for (int i = 0; i < List.Count; i++)
sum += List[i];
Console.WriteLine(sum); // this will print sum of even number.