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

Projekt Euler Zadanie 2

Object Storage Arubacloud
0 głosów
544 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ź 217 wizyt
pytanie zadane 20 września 2019 w C i C++ przez kawapa Nowicjusz (210 p.)
0 głosów
1 odpowiedź 111 wizyt
pytanie zadane 14 czerwca 2018 w C i C++ przez Zaratustra Początkujący (320 p.)
0 głosów
1 odpowiedź 335 wizyt
pytanie zadane 12 lutego 2021 w Java przez Aleksandra6 Nowicjusz (140 p.)

92,551 zapytań

141,399 odpowiedzi

319,529 komentarzy

61,937 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...