我正在解决Euler项目页面上的问题2
Fibonacci序列中的每个新项都是通过添加前两个项来生成的。从1和2开始,前10项将是:1、2、3、5、8、13、21、34、55、89、.通过考虑Fibonacci序列中值不超过400万的项,找出偶数项的和。
在我把所有偶数加起来之前,我想要生成一个它们的列表。
我创建了以下方法:
    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发布于 2017-07-10 20:17:10
我建议实现生成器,然后在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
发布于 2017-07-10 20:14:25
您正在添加一个迭代变量,而不是列表元素本身。
evenList.Add(i);应该是
 evenList.Add(list[i]);发布于 2017-07-10 20:30:25
不要保存偶数索引。将数字保存在这样的索引处。
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.https://stackoverflow.com/questions/45020774
复制相似问题