Loading...
ToniStoyanov avatar ToniStoyanov 8 Точки

Грешка в задача No.5 Fibonacci numbers "Methods. Debugging and Troubleshooting Code - Exercises"

Здравейте,

Открих малка грешка в задачката за номера на Фибоначи в условието на задачата е показано, че F(0) = 1,

а по-принцип трябва да е равно на 0. Ето няколко от първите числа на Фибоначи:

           1 |                     1
           2 |                     1
           3 |                     2
           4 |                     3
           5 |                     5
           6 |                     8
           7 |                    13
           8 |                    21
           9 |                    34
          10 |                    55
          11 |                    89

 

Източник Wikipedia: https://bg.wikipedia.org/wiki/%D0%A7%D0%B8%D1%81%D0%BB%D0%B0_%D0%BD%D0%B0_%D0%A4%D0%B8%D0%B1%D0%BE%D0%BD%D0%B0%D1%87%D0%B8

Тагове:
prohause avatar prohause 356 Точки

Не забравяй че нормалните хора броят от 1 а програмистите от 0. Може би от там идва объркването.

0
ToniStoyanov avatar ToniStoyanov 8 Точки

Може и така, да е но те и числата на Фибоначи си започват от 0:

"Започва се с 0 и 1, а всеки следващ член на редицата се получава като сума на предходните два."

В смисъл ако напишем програмата по тази логика след това в judge гърми и трябва да си променим цикъла да започва от 1 тоест F(0)  да е равно на 1, което пък от своя страна е грешно.

0
andreiko489 avatar andreiko489 17 Точки

Числата на Фибоначи може да са всички числа. Числата на Фибоначи в математиката образуват редица, която се дефинира рекурсивно като всеки нейн член се образува от сбора на предходните и два члена.

Ако например първия член на такава редица е 2018, а втория 2019, то третия ще е 2018+2019 = 4037. В такъв случай 2018, 2019 и 4037 ще са съответно в посочения ред първото, второто и третото число на Фибоначи.

Ето го и моя (малко по-математически) код:

using System;

namespace Fibonacci
{
    class Program
    {
        static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());

            double root1 = (1 + Math.Sqrt(5)) / 2;
            double root2 = (1 - Math.Sqrt(5)) / 2;

            double difference = Math.Pow(root1, n + 1) - Math.Pow(root2, n + 1);

            double NthFibonacciNumber = difference / Math.Sqrt(5);

            Console.WriteLine(NthFibonacciNumber);
        }
    }
}

 

 

1
ValenNEW avatar ValenNEW 51 Точки

// PSEUDO CODE ... THIS IS A PSEUDOCODE! REMEMBER THAT!

INT FIBONACCHIONE = 0;

INT FIBONACCHITWO = 1;

INT FIBONFIBONACCHISUM = 0;

INT USERCHOICECOUNT = 0;

USERCHOICECOUNT = INT.PARSE(Console.Readline());

:ITERATION START(USERCHOICECOUNT) - GO

{

FIBONFIBONACCHISUM = FIBONACCHIONE + FIBONACCHITWO;

FIBONACCHIONE = FIBONACCHITWO;

FIBONACCHITWO = FIBONFIBONACCHISUM;

Console.WriteLine(FIBONACCHITWO);

}

:ITERATION END();

if (ITERATION == 0)

{

Console.WriteLine(1);

}

Сори, че така съм го написал. Просто ме мързи! :)

Дано да е лесно за разбиране :)

Ето един жокер: В програмирането се брои от нула (0) ... т.е. позиция 1 е 0, позиция 2 е 1 ... и.т.н.

0
10/06/2018 23:34:30
ValenNEW avatar ValenNEW 51 Точки

Ето и мое решение написано на C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


class FibonacciNumbers
{
    static void Main(string[] args)
    {
        int n = int.Parse(Console.ReadLine());
        int fiSumatorOne = 1;
        int fiSumatorTwo = 1;
        int totalSum = 0;
        if (n < 2)
        {
            Console.WriteLine(1);
            return;
        }
        for (int a = 1; a < n; a++)
        {
            totalSum = (fiSumatorOne + fiSumatorTwo);
            fiSumatorOne = fiSumatorTwo;
            fiSumatorTwo = totalSum;
        }
        Console.WriteLine(totalSum);
    }
}

 

0
Nnavi avatar Nnavi 2 Точки

Само не разбирам защо Judge ми дава един грешен тест и ми дава 78/100. 

using System;

namespace _5_Exercises_Fibbonacci
{
    class Program
    {
        public static int Fib(int n)
        {
            int fibonacci1 = 1;
            int fibonacci2 = 1;
            int fibonaccin = 0;
            for (int i = 1; i < n; i++)
            {
                fibonaccin = fibonacci1 + fibonacci2;
                fibonacci1 = fibonacci2;
                fibonacci2 = fibonaccin;
            }
            return fibonaccin;
        }
        static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            if (n==0)
            {
                Console.WriteLine("0");
            }
            else if (n==1)
            {
                Console.WriteLine("1");
            }
            else
            {
                Console.WriteLine(Fib(n));
            }
           
        }
    }
}

0
BoYaN avatar BoYaN 336 Точки

Здравейте,
@ToniStoyanov ако погледнеш в статията на английски на wikipedia, ще видиш, че и двата варианта за начални числа са приети и това не влияе на стойностите, разбира се променя позициите им.
@prohause това че редицата може да започва от 0 няма нищо общо с програмирането. По-вероятна причина може да е това че 0-та е открита по-късно и както е отбелязано в статията " Often, especially in modern usage ..." редицата почва от 0.
@ValenNEW и @Nnavi алгоритъмът ви, по-точно момента когато проверявате дали е по-малък от 2, не е правилен подход, защото не връщате съответния елемент от редицата, а един вид е хардкодната стойност за която правите тази проверка.
Ето и моето решение на Python, което дава 100/100 в джъджа. Ако трябва да се нагласи да почва от 0 , просто заменяш стойността на first = 0.

0
26/08/2018 09:12:48
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.