• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Projekt Euler Zadanie 2

VPS Starter Arubacloud
0 głosów
539 wizyt
pytanie zadane 12 lutego 2017 w Java przez Szymon Ciamaga Obywatel (1,980 p.)
edycja 12 lutego 2017 przez Szymon Ciamaga

Witam, robię zadanie z Project Euler https://projecteuler.net/problem=2. Moje rozwiązanie wygląda tak ale odpowiedź dalej jest nieprawidłowa co robię nie tak ?

 

public class Main {
    public static final int MAX_NUMBERS = 4000000;

    public static void main(String[] args) {
        long[] fibo = new long[MAX_NUMBERS];

        int i = 2;
        long sum = 0;
        long next = 0;
        fibo[0] = 1;
        fibo[1] = 2;

        while (i < fibo.length) {
            next = fibo[i - 1] + fibo[i - 2];
            fibo[i] = next;
            if (fibo[i-2] % 2 == 0) {
                sum += fibo[i];
            }
            i++;
        }
        System.out.println(sum);
    }
}

 

2 odpowiedzi

+2 głosów
odpowiedź 12 lutego 2017 przez niezalogowany
wybrane 12 lutego 2017 przez Szymon Ciamaga
 
Najlepsza
Chodzi o to by znaleźć sumę tych wyrazów, które są mniejsze od 4000000 i parzyste. Będzie ich mało więc suma powinna się zmieścić nawet w incie.
0 głosów
odpowiedź 12 lutego 2017 przez Porcupine Nałogowiec (31,560 p.)

Na pewno nie ma potrzeby żebyś trzymał te liczby w tablicy. Zamiast tego wystarczy, że będzie pamiętać w danym momencie wartość dwóch ostatnich wyników i na ich podstawie obliczać kolejny.

Co to przekroczenia maksymalnej wartości long'a - jest to bardzo prawdopodobne. W Javie możesz użyć specjalnej klasy BigInteger (https://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html) żeby rozwiązać ten problem.

komentarz 12 lutego 2017 przez Szymon Ciamaga Obywatel (1,980 p.)
już sobie z tym chyba poradziłem ale odpowiedź dalej jest zła
komentarz 12 lutego 2017 przez niezalogowany
Może chodzi o to, że 4mln to maksymalna wielkość wyrazów ciągu, a nie ich liczba?
komentarz 12 lutego 2017 przez Szymon Ciamaga Obywatel (1,980 p.)
if (fibo[i-2] < 4000000 || fibo[i-2] % 2 == 0) {
                sum += fibo[i-2];
            }

poprawiłem ten warunek w taki sposób ale jak łatwo się domyśleć nie działa doradź mi proszę jak to zapisać siedze już nad tym długo i nie mogę znaleźć rozwiązania.
1
komentarz 12 lutego 2017 przez niezalogowany

Ja bym zrobił to tak:

       while (i < fibo.length) { // ten length na jakieś 50
            next = fibo[i - 1] + fibo[i - 2];
            fibo[i] = next;
            if(next > 4000000) break; // przerwanie pętli
       	    if(next%2==0)  sum+=next;
            i++;
        }

Spróbuj może wejdzie. 

1
komentarz 12 lutego 2017 przez niezalogowany
Jeszcze ważna rzecz!!! Do sumy, która z tego kodu wyjdzie 4613730 musisz jeszcze dodać 2, ponieważ drugi element ciągu tyle wynosił i suma powinna mieć wartość 2 na początku, bo 2 jest parzyste!
komentarz 12 lutego 2017 przez Szymon Ciamaga Obywatel (1,980 p.)
nie przeszło ale ta suma wygląda już lepiej
komentarz 12 lutego 2017 przez niezalogowany
Jaka wychodzi Ci suma?
komentarz 12 lutego 2017 przez Szymon Ciamaga Obywatel (1,980 p.)
przeszło! dziekuję! ;) odpowiedź: 4613732
komentarz 12 lutego 2017 przez niezalogowany
UFF to dobrze. Najgorsze w tym zadaniu chyba było to rozszyfrowanie co dokładnie autorzy zadania chcą :)
1
komentarz 12 lutego 2017 przez niezalogowany
Ejjjj ale ja jestem Hipcio! Ten z odpowiedzią trochę niżej :D
komentarz 12 lutego 2017 przez Szymon Ciamaga Obywatel (1,980 p.)
no właśnie zauważyłem że wszystkie zadania takie są.

Podobne pytania

0 głosów
1 odpowiedź 199 wizyt
pytanie zadane 20 września 2019 w C i C++ przez kawapa Nowicjusz (210 p.)
0 głosów
1 odpowiedź 110 wizyt
pytanie zadane 14 czerwca 2018 w C i C++ przez Zaratustra Początkujący (320 p.)
0 głosów
1 odpowiedź 319 wizyt
pytanie zadane 12 lutego 2021 w Java przez Aleksandra6 Nowicjusz (140 p.)

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...