Помощ със задача Fundamentals Console Input and Output 10. Fibonacci Numbers


1

Здравейте колеги ако някой може да помогне със решението на тази задача това което съм направил до момента ми дава 87/100 в BGCODER някои да даде насоки или да каже къде гърми. Ето и решението до момента 

http://pastebin.com/zXpVwnPJ




Отговори



1

long firstNum = 0;

long secondNum = 1;

long thirdNum = 0;

От твоя код смени firstNum, secondNum и thirdNum от int в long : )

Грешката идва от там, че в един момент максималната стойност на int ти идва твърде малка и се препълва и става мазаляк.


от tabula (2134 точки)


1
using System;

class Program
{
    static void Main()
    {
        ulong n = ulong.Parse(Console.ReadLine());
        ulong a = 0;
        ulong b = 1;
        if (n == 1)
        {
            Console.WriteLine(0);
        }
        else
        {
            Console.Write("0, 1");
            for (ulong i = 1; i < n-1; i++)
            {
                ulong temp = a + b;
                a = b;
                b = temp;
                Console.Write(", {0}", temp);
            }
        }
    }
}
Ето моето решение, не ми дава никъкви грешки.



2
Предлагам да се ползва pastebin.com или github за споделяне на код :) ( към колегата nikolovstefan97) Или поне бутона Insert Code Snippet (последният бутон във формата на коментарите [на долният, втори ред, най-вдясно])

от V.Profirov (1122 точки)


2
Смени типа данни и не е нужно да валидираш входните данни. Провери какъв резултат ти дава кода при гранична стойност 50. Отрицателни числа, зашото прехвърляш int.

от dushka.dragoeva (1324 точки)


3
Благодаря на всички за помощта. За напред ще обръщам повече внимание на типа данни. Благодаря

от composer2 (307 точки)


1

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

namespace FibonacciNumbers
{
    class Program
    {
        static void Main(string[] args)
        {
            int N = int.Parse(Console.ReadLine());
  
            int a = 0;
            int b = 1;
            int c = 0;

            if (N == 1)
            {
                Console.Write("{0}", 0);
            }
            else
            {

                Console.Write("{0}, {1}", a, b);

                for (int i = 0; i < N - 2; i++)
                {
                    c = a + b;
                    Console.Write(", {0}", c);
                    a = b;
                    b = c;
                
                }
            }

        }
    }
}

  Този код изгърмя на тест 7 и не мога да разбера защо.              

от pdimova (256 точки)


0
Проблема изглежда е същия като задачата по-горе - промени типа на променливите a, b и c от int на long (или ulong), защото 47-мото число на Фибоначи не може да събере в 32 бита. С други думи е по-голямо от максималната стойност на int - 2147483647.


0
Като има дълги редици им задавай максимални стойности, за да си ги провериш. Като почнат да ти излизат отрицателни стойности ще си усетиш грешката.

от Petar.Yanev (55 точки)