检查arraylist是否是fibonacci序列的一部分c#

时间:2016-05-15 12:37:49

标签: c# list fibonacci

我在此链接上找到了类似的解决方案Java: check if arraylist is part of fibonacci sequence,但我想在c#中找到它。我托盘转换为c#,但它不起作用。有人可以帮我,告诉我哪里错了。

{{1}}

2 个答案:

答案 0 :(得分:1)

List.IndexOf方法返回指定为参数的元素的索引:https://msdn.microsoft.com/en-us/library/e4w08k17%28v=vs.110%29.aspx

难道你不想在指定的索引处获取元素,这将是arr [i]?

更新了源代码:

static void Main(string[] args)
    {
        List<int> list = new List<int> { 0, 1, 1, 2, 3, 5, 8, 13, 21 };
        Console.WriteLine(isFibonacci(list));
        Console.ReadLine();
    }

    public static bool isFibonacci(List<int> arr)
    {

        if (arr.Count() < 3)
        {
            return false;
        }

        int fib1 = 0;
        int fib2 = 1;

        while (fib1 < arr[0])
        {
            int tmp = fib1 + fib2;
            fib1 = fib2;
            fib2 = tmp;
        }

        if (fib1 != arr[0])
        {
            return false;
        }

        if (fib2 != arr[1])
        {
            return false;
        }

        for (int i = 2; i < arr.Count(); i++)
        {
            if (arr[i] < 0)
                return false;

            // I think that problem is in this part of code
            if (arr[i] != (arr[i - 1] + arr[i - 2]))
                return false;
        }
        return true;
    }

答案 1 :(得分:0)

这不是问题的直接答案。我只是觉得在LINQ中这样做会很有趣。

你可以这样做:

public static bool isFibonacci(List<int> arr)
{
    return
        arr
            .Zip(
                arr.Skip(1),
                (x0, x1) => new { x0, x1 })
            .Zip(
                arr.Skip(2),
                (x01, x2) => x01.x0 + x01.x1 - x2 == 0)
            .All(x => x);
}

或者使用Interactive Extensions(NuGet&#34; Ix-Main&#34;):

public static bool isFibonacci(List<int> arr)
{
    return arr.Buffer(3, 1).Where(x => x.Count == 3).All(x => x[0] + x[1] == x[2]);
}