C# 查找数字是否在斐波那契范围内

C# 查找数字是否在斐波那契范围内,c#,numbers,position,range,fibonacci,C#,Numbers,Position,Range,Fibonacci,我已经印了一些斐波那契数。现在,我想看看我输入的数字是否在该范围内,如果在该范围内,则显示其位置。 这就是我到目前为止所做的: using System; namespace SomeFibonacciPrimes { class SomeFibonacciPrimes { static void Main() { int first = 0; int second = 1;

我已经印了一些斐波那契数。现在,我想看看我输入的数字是否在该范围内,如果在该范围内,则显示其位置。 这就是我到目前为止所做的:

using System;

namespace SomeFibonacciPrimes
{
    class SomeFibonacciPrimes
    {
        static void Main()
        {
            int first = 0;
            int second = 1;
            int third = 1;
            for (int i = 0; i < 50; i++)
            {
                third = second;
                second = first + second;
                first = third;
                Console.WriteLine(second);                      
            }
            Console.WriteLine("Enter a number to find if it's in Fibonacci      range:");
            int number = int.Parse(Console.ReadLine());
            if (number == second)
            {
                Console.WriteLine("Your number is within the Fibonacci range.");
            }
            else
            {
                Console.WriteLine("Your number is NOT within the Fibonacci range");
            }
       }
   }
}
使用系统;
命名空间SomeFibonacciPrimes
{
类fibonacciprimes
{
静态void Main()
{
int first=0;
int秒=1;
int第三=1;
对于(int i=0;i<50;i++)
{
第三=第二;
秒=第一+秒;
第一=第三;
控制台写入线(第二);
}
WriteLine(“输入一个数字,以查找它是否在斐波那契范围内:”);
int number=int.Parse(Console.ReadLine());
如果(数字==秒)
{
WriteLine(“您的数字在斐波那契范围内。”);
}
其他的
{
WriteLine(“您的号码不在斐波那契范围内”);
}
}
}
}
我不明白如果我输入一个在范围内的数字,为什么If语句会打印else结果?!
我认为,在我设法使If语句起作用之后,该位置就是for语句中的“I”

我建议您使用整数的
数组或整数的
列表来解决这个问题:如下所示:

            int first = 0;
            int second = 1;
            int third = 1;
            List<int> fibnoList= new List<int>();                  
            for (int i = 0; i < 50; i++)
            {
                fibnoList.Add(second);  
                Console.WriteLine(second); //To print the series  
                third = second;
                second = first + second;
                first = third;                                    
            }
            Console.WriteLine("Enter a number to find if it's in Fibonacci      range:");
            int number = int.Parse(Console.ReadLine());
            if (fibnoList.Contains(number))
            {
                Console.WriteLine("Your number is within the Fibonacci range.");
            }
            else
            {
                Console.WriteLine("Your number is NOT within the Fibonacci range");
            }
int first=0;
int秒=1;
int第三=1;
List fibnoList=新列表();
对于(int i=0;i<50;i++)
{
添加纤维列表(第二);
Console.WriteLine(秒);//打印系列
第三=第二;
秒=第一+秒;
第一=第三;
}
WriteLine(“输入一个数字,以查找它是否在斐波那契范围内:”);
int number=int.Parse(Console.ReadLine());
if(纤维列表包含(编号))
{
WriteLine(“您的数字在斐波那契范围内。”);
}
其他的
{
WriteLine(“您的号码不在斐波那契范围内”);
}

>P>除了使用循环外,您可以考虑这个

using System;

namespace SomeFibonacciPrimes
{
    class SomeFibonacciPrimes
    {
        static void Main()
        {
            Console.WriteLine("Enter a number to find if it's in Fibonacci      range:");
            int number = int.Parse(Console.ReadLine());
            if (IsFibonacci(number))
            {
                Console.WriteLine("Your number is within the Fibonacci range.");
            }
            else
            {
                Console.WriteLine("Your number is NOT within the Fibonacci range");
            }
       }




        static bool IsFibonacci(int number)
        {
            //Uses a closed form solution for the fibonacci number calculation.
            //http://en.wikipedia.org/wiki/Fibonacci_number#Closed-form_expression

            double fi = (1 + Math.Sqrt(5)) / 2.0; //Golden ratio
            int n = (int) Math.Floor(Math.Log(number * Math.Sqrt(5) + 0.5, fi)); //Find's the index (n) of the given number in the fibonacci sequence

            int actualFibonacciNumber = (int)Math.Floor(Math.Pow(fi, n) / Math.Sqrt(5) + 0.5); //Finds the actual number corresponding to given index (n)

            return actualFibonacciNumber == number;
        }
    }
}

例如,您输入了什么?你知道你在比较你的
号码
秒数
,对吗?我的意思是,不适用于任何范围。您没有存储数字,因此
second
将是范围内的最后一个数字,即50以下的最后一个斐波那契数。因此,对于除该数字以外的任何数字,您都会得到else语句。在我打印范围后,我选择了数字89/它在范围内/而If语句会打印“else”结果?!我认为“==”操作符看起来在秒的整个范围内,不是吗?不是我写的?!找不到类型或命名空间名称“列表”?为什么?使用System.Collections.Generic;成功了!!!:但现在它不打印范围内的斐波那契数。没关系,我会成功的!非常感谢你!!在这里“如果(IsFibonacci(数字))”这是什么“IsFibonacci”?我没有静下心来关注整个代码。我以某种方式使它足够可读:)