80 / 237
Sep 2016

mój poprzedni post nie był do ciebie.
ten jest :slight_smile:

także używasz zbyt dużo zmiennych, przecież te dwie tablice są zupełnie niepotrzebne, możesz od razu wypisać odpowiedź, testuj program nie u siebie, ale na ideone.com, nie ma wtedy problemu z mieszaniem się wejścia i wyjścia

w wątku wielokrotnie pisano, dlaczego nie należy używać funkcji pow() - przeczytaj ten wątek i pomyśl - myślenie nie boli (wiem, są wyjątki)

Ile jeszcze osób ma ci odpisać, żebyś zrozumiał?

Przetestuj i zobacz:

11
1289312391 0
1 2321323123
2 324324345
3 435435436
4 9080237
5 2163062
6 96123412
7 921638125
8 2128963591
9 21538123
0 182931253

Twój program wypisuje:
Wynik : 1
Wynik : 1
Wynik : 1
Wynik : 1
Wynik : 1
Wynik : 1
Wynik : 1
Wynik : 1
Wynik : 1
Wynik : 1
Wynik : 1

A prawidłowy out to:
1
1
2
1
4
5
6
7
2
9
0

Nie umieszczaj żadnych informacji o wyniku itd. To sprawdza komputer, nie człowiek i dla niego liczy się output taki, jaki wyznaczył autor zadania.

1:
system("cls"); // do wywalenia

2:
cout<<"Wynik : "<<(pot%10); // zamień na:

cout << pot % 10;

I tak ci po tych zmianach nie przejdzie:

http://ideone.com/c2gUQz22

3:
Przeczytaj jeszcze raz dokładnie cały wątek i popraw algorytm.

Testy podstawowe owszem - przejdzie. Ale innych już nie. Algorytm do wymiany :wink:

Witam mam taki problem odnosnie tego przypadku : 5 2163062 modulo z 2163062 wynosi 2. Więc 5 do potęgi 2 powinno dać 25, a u mnie daje 24 czy możecie spojrzeć i powiedzieć dlaczego ?

Dzięki za wskazówki

bo używasz kompilatora C++, który ma błędną implementację biblioteki matematycznej , w szczególności
pow(5, 2) daje wynik 24,999999999999 :slight_smile:

jeżeli sprawdzisz to na ideone.com, to tam będzie to 25

a teraz uwagi:
1) po pierwsze kod przekazujemy poprzez link do ideone.com (tam też możemy testować dane przykładowe)
2) przeczytaj, jak należy rozwiązywać zadania na spoj-u, informacje znajdziesz na starym forum spoj-a25
3) przeczytaj dokładnie treść zadania, bo obecnie rozwiązanie ma niewiele wspólnego z zadaniem
4) przeczytaj dokładnie cały ten wątek, to może nie będziesz musiał pisać: "u mnie działa, a sędzia mnie nie lubi i złośliwie mi nie zalicza :sob:"

13 days later

witam, mam pewien problem z tym zadaniem.
tutaj link do kodu http://ideone.com/oXnnnu9 dla malych poteg dziala ok dla wiekszych zwraca wartosc -8. podejrzewam ze wychodzi poza zakres long ale nie bardzo mam pomysl jak inaczej to rozwiazac. prosze o jakies wskazowki

może zacznij od przeczytania tego wątku ?

potem karta, ołówek (długopis) i policz trochę przypadków, a na koniec wyciągnij w tego prawidłowości

jeżeli kogoś boli myślenie, to przede wszystkim nie powinien myśleć o programowaniu

Może się mylę, może nie...ale coś mi się wydaje że coś Ci się sypie ze względu na zmienne.
Czy nie ?!
W sensie ze dla wyniku, zwykły int to może być troszkę mały pojemnosciowo jak na tak spory wynik. Czy po prostu sie nie znam ?!

A po za tym nijaki "mariusz" napisał:

w wątku wielokrotnie pisano, dlaczego nie należy używać funkcji pow() - przeczytaj ten wątek i pomyśl - myślenie nie boli (wiem, są wyjątki)(...)

a nie jaki sig napisał:

Wypisz sobie po 10 pierwszych potęg liczb od 1 do 10, i spójrz na ostatnie cyfry.

Ja jeszcze skrobie swój kodzik dlatego tak mało pewnie...

.. i się udało :slight_smile:
Sędzia zaakceptował po czasie 0.00s, można?! MOŻNA!
Wystarczy poczytać i chwilkę pomyśleć.

Dodam że wykorzystywałem standardowe "cin" "cout" bez żadnych dodatkowych bibliotek, zaledwie 3 zmienne typu int.

Aktualnie walczę z innym problemem. Przekraczam limit czasowy. Czytałem post i zauważyłem zależności miedzy potęgami. Wydaje mi się że nie jest to jedyny sposób na rozwiązanie tego zadania. http://ideone.com/n3B6uO35 oto mój kod. Jak masz jakieś pomysły jak go przyspieszyć by się mieścił w limicie czasowym to słucham :slight_smile:

[edit by narbej] ... Post jest skierowany do osób chcących udzielić odpowiedzi/podpowiedzi, ...

Pomogłem już dziesiątkom osób, tobie też dałem odpowiedź, najlepszą z możliwych :slight_smile:
to, że jej nie rozumiesz, to twój problem

Nikt inny raczej tego nawet nie czyta, a tym bardziej jeżeli nie chciałby pomóc.

PS
Beznadziejny przypadek - chodziło o to, że twojego sposobu nie da się przyśpieszyć, nawet jak poczytasz o szybkim potęgowaniu, to twój kod wymaga zbyt dużo poprawek - a chyba chodzi tu też o odrobinę samodzielności, czyż nie?

A szkoda, bo każdy szukający tu pomocy, powinien zawsze najpierw poczytać wątek/[a nawet wątki] poświęcone problemowemu zadaniu. Np: http://discuss.spoj.com/search?q=czy%20umiesz%20pot%C4%99gowa%C4%87 + [plus] http://213.192.104.217/phpBB3-spoj-pl-backup/viewtopic.php?f=1&t=222&hilit=czy+umiesz+pot%C4%99gowa%C4%87&sid=689abcabeb3c4142e274150b75303a4313 a dopiero potem, jeżeli nie znajdzie odpowiedzi, zadawać tu swoje pytanie/a...

Ja Ci podpowiem. Rzeczywiście masz sporo błędów, co nie oznacza, że jesteś głupi, ale przydałoby Ci się trochę lepiej poznać język C++. Może jakaś książka, żeby ugruntować sobie wiedzę? Albo po prostu więcej uwagi, jeśli wiedzę masz. Pierwsze co mi się rzuciło, to w treści zadania masz napisane, że wszystkie dane wejściowe są liczbami całkowitymi. Potem operacje, które na nich wykonujesz dotyczą liczb całkowitych(modulo, dodawanie, mnożenie itp). Wyjścia też są liczbami całkowitymi(cyfra jedności wyniku a^b, gdzie a i b są liczbami całkowitymi dodatnimi). W związku z tym nie należy się spodziewać, by w programie przydały się liczby zmiennoprzecinkowe. Twoje zmienne a i b zadeklarowałeś jako typu double, czyli zmiennoprzecinkowe o podwójnej precyzji, a nie poszerzony zakres int(a przypuszczam, że o to Ci mogło chodzić). Jeśli chodzi o sposób na obliczenie cyfry jedności zauważ, że dla np b=1000000000, instrukcje z pętli będą wykonywały się miliard razy, a limit czasowy wynosi 0.529 sekundy. Nie znam się za bardzo na przełożeniu złożoności obliczeniowej na czas wykonywania, ale już nawet na pierwszy rzut oka taki przypadek śmierdzi baaaardzo długim czasem wykonywania, powyżej 0.529s. Sama idea funkcji nie jest zła. Jeśli chodzi o samo skrócenie czasu wykonywania- gdzieś w temacie wcześniej było poruszone, ale powtórzę podpowiedź: Rozpisz sobie pierwszych 6 potęg liczby 2, zaczynając od 2^1, a kończąc na 2^6 i postaraj się zauważyć powtarzającą się prawidłowość w wyniku w rzędzie jedności. Jeśli nie będziesz w stanie rozwiązać tego zadania po staraniach, prześledź temat, wgryź się w cudze kody i zobaczysz w czym rzecz. Powodzenia:)