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”?我没有静下心来关注整个代码。我以某种方式使它足够可读:)