C#斐波那契序列复制
我试图解决Euler项目的第二个问题,问题是: 斐波那契序列中的每个新项都是通过将前两项相加生成的。从1和2开始,前10个术语将是: 1、2、3、5、8、13、21、34、55、89 求序列中所有不超过400万的偶数值项之和 因此,我设立了以下机构:C#斐波那契序列复制,c#,if-statement,while-loop,C#,If Statement,While Loop,我试图解决Euler项目的第二个问题,问题是: 斐波那契序列中的每个新项都是通过将前两项相加生成的。从1和2开始,前10个术语将是: 1、2、3、5、8、13、21、34、55、89 求序列中所有不超过400万的偶数值项之和 因此,我设立了以下机构: using System; namespace ProjectEuler { class Question2 { //Project Euler - Question 2 //Each new te
using System;
namespace ProjectEuler
{
class Question2
{
//Project Euler - Question 2
//Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:
//1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
//Find the sum of all the even-valued terms in the sequence which do not exceed four million
static void Main()
{
int sum = 0;
int oldNumber = 1;
int currentNumber = 1;
int nextNumber;
while (currentNumber <= 500)
{
nextNumber = currentNumber + oldNumber;
if (nextNumber % 2 == 0)
{
sum += currentNumber;
}
}
Console.WriteLine("Project Euler - Question 2\n\nAnswer: " + sum);
Console.ReadLine();
}
}
}
使用系统;
命名空间ProjectEuler
{
课堂问题2
{
//欧拉项目-问题2
//斐波那契序列中的每个新项都是通过将前两项相加生成的。从1和2开始,前10项将是:
//1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
//求序列中所有不超过四百万的偶数项之和
静态void Main()
{
整数和=0;
整数=1;
int currentNumber=1;
int nextNumber;
而(currentNumber您没有结束循环的条件。您永远不会将currentNumber的值更改为1以外的任何值
您可能需要以下内容:
nextNumber = currentNumber + oldNumber;
oldNumber = currentNumber;
currentNumber = nextNumber;
nextNumber = currentNumber + oldNumber;
oldNumber = currentNumber;
currentNumber = nextNumber;
您没有结束循环的条件。您永远不会将currentNumber的值更改为1以外的任何值
您可能需要以下内容:
nextNumber = currentNumber + oldNumber;
oldNumber = currentNumber;
currentNumber = nextNumber;
nextNumber = currentNumber + oldNumber;
oldNumber = currentNumber;
currentNumber = nextNumber;
不,它没有被更新,你有一个无限循环
思考斐波那契序列的一个更简单的方法是,下一个值是前两个值的总和
即
0 1。下一个是1
接下来是2(1+1)
接下来是3(1+2)
接下来是5(2+5)
因此,请跟踪最后两个值,并使用这两个值创建下一个值。不,它不会被更新,并且您有一个无限循环
思考斐波那契序列的一个更简单的方法是,下一个值是前两个值的总和
即
0 1。下一个是1
接下来是2(1+1)
接下来是3(1+2)
接下来是5(2+5)
因此,请跟踪最后两个值,并使用这两个值创建下一个值。您是对的,问题在于currentNumber
从未更新。请再次查看斐波那契序列:
F(n+2) = F(n+1) + F(n)
^ currentNumber
^ nextNumber ^ oldNumber
在下一次迭代中:
F(n+3) = F(n+2) + F(n+1)
^ currentNumber
^ nextNumber ^ oldNumber
请注意,变量被向右移动一个位置,最早的数字被丢弃。因此,您需要执行以下操作:
你是对的,问题是因为currentNumber
从未更新。请再次查看斐波那契序列:
F(n+2) = F(n+1) + F(n)
^ currentNumber
^ nextNumber ^ oldNumber
在下一次迭代中:
F(n+3) = F(n+2) + F(n+1)
^ currentNumber
^ nextNumber ^ oldNumber
请注意,变量被向右移动一个位置,最早的数字被丢弃。因此,您需要执行以下操作:
使用系统;
命名空间ProjectEuler
{
课堂问题2
{
//欧拉项目-问题2
//斐波那契序列中的每个新项都是通过将前两项相加生成的。从1和2开始,前10项将是:
//1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
//求序列中所有不超过四百万的偶数项之和
静态void Main()
{
整数和=0;
int currentNumber=1;
int lastNumber=0;
当(currentNumber使用系统时;
命名空间ProjectEuler
{
课堂问题2
{
//欧拉项目-问题2
//斐波那契序列中的每个新项都是通过将前两项相加生成的。从1和2开始,前10项将是:
//1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
//求序列中所有不超过四百万的偶数项之和
静态void Main()
{
整数和=0;
int currentNumber=1;
int lastNumber=0;
while(currentNumberstatic void Main(字符串[]args)
{
var总和=0;
foreach(GetEvenFibonacciSeries()中的变量号)
{
如果(总和+数字>4000000)
打破
总和+=数字;
}
控制台写入线(总和);
}
私有静态IEnumerable GetEvenFibonacciSeries()
{
var first=0;
var秒=1;
var-next=0;
while(true)
{
下一个=第一个+第二个;
第一=第二;
第二个=下一个;
如果(下一个%2==0)
其次是收益率;
}
}
静态void Main(字符串[]args)
{
var总和=0;
foreach(GetEvenFibonacciSeries()中的变量号)
{
如果(总和+数字>4000000)
打破
总和+=数字;
}
控制台写入线(总和);
}
私有静态IEnumerable GetEvenFibonacciSeries()
{
var first=0;
var秒=1;
var-next=0;
while(true)
{
下一个=第一个+第二个;
第一=第二;
第二个=下一个;
如果(下一个%2==0)
其次是收益率;
}
}