201 / 237
Jan 2019

każdy może zadać pytanie, ale mało kto czyta przed tym wątek
czy naprawdę myślisz, że jesteś pierwszy który ma taki problem, skoro w wątku jest już 180 postów ?

po co mi te informacje ?
i tak nie mam zamiaru odpowiadać po raz kolejny na to samo pytanie,
powtarzam więc - przeczytaj ten wątek, znajdziesz odpowiedź jak poprawnie zrobić to zadanie oraz dlaczego czasami komputerowi zamiast 25 wychodzi 24 :slight_smile:

Pomocny miły i sugestywny panie mariusz193 dziękuje bardzo za życzliwość i nie ocenioną pomoc w rozwiązaniu mojego problemu i zapewne nieocenionej pomocy udzielonej innym osobom starającym się zrozumieć podstawy programowania.
Jak już wspominałem wcześniej moim problemem nie jest to, że wyskakuje 24 bo ten problem już rozwiązałem przez dodanie danych w formie double.
Problem mam z tym, że funkcja modulo nie działa mi przy danych w tej formie. ;(
I tu rodzi się moje pytanie czy jakoś można można to obejść.
Każda rada oprócz “i tak nie mam zamiaru odpowiadać po raz kolejny na to samo pytanie” będzie pomocna.
Jeżeli znajduje pan czas na pisanie takiego typu bez użytecznych informacji to ma pan za dużo czasu xp
Wątek przejrzałem i nie znalazłem niczego pomocnego.

ja nie zajmuję się rozwiązywaniem cudzych problemów, ja co najwyżej problemy wskazuję a rozwiązanie zostawiam autorowi programu

nie wystarczy przejrzeć, trzeba jeszcze zrozumieć - a w tym wątku wielokrotnie napisano, dlaczego twój program nigdy nie uzyska AC

Ta wersja jest akceptowana przez SPOJ - zupełnie mnie to nie satysfakcjonuje.
Nadal pozostaje problem 5 do 2 końcówka 4 ;(
Jeżeli ktoś chciałby zrobić to naprawdę prawidłowo polecam wersje z double zamiast inta
myślę, że docelowo z tego można uzyskać naprawdę prawidłowy wynik.
Ja się nie poddaje kombinuje dalej. Jeżeli komuś się uda wdzięczny będę za jakiekolwiek podpowiedzi.
Uważam, że nie ma czegoś takiego, że się nie da jak wiele osób tu piszę w wątkach.

#include
#include <math.h>

using namespace std;
int a,b,d;
int p;

int main()
{
cin>>d;
cout<<endl<<endl;

for(int i=0; i<d; i++)
{
    cin>>a>>b;

    a=a%10;

    if (b%4==0)
        b=4;
    else
        b=b%4;

    p=pow(a,b);

    cout<<p%10<<endl<<endl;

}

return 0;

}

@nekron Jak nie wstawisz ładnie kodu (najlepiej przez ideone) to Ci nie odpowiem bo uznam, że zlewasz nasze uwagi.

1 month later

Witam, mój kod(w javie) prawdopodobnie nie przechodzi 2 testów, nie wiem co może być błędnego w moim kodzie, proszę o pomoc.
kod: https://ideone.com/QrKHbJ8
w linku błędna prawdopodobnie 3 435435436 i 8 2128963591

skoro wiesz, dla jakich danych masz błąd, to jest to już jedynie twój problem - nikt za ciebie nie będzie poprawiał

a jeżeli sam nie potrafisz poprawić w rozsądnym czasie, to dopiero wtedy przeczytaj ten wątek, bo odpowiedź już jest :slight_smile:

Dziękuje Mariusz, udało się uporać z problemem! :smiley:
Troszeczkę musiałem inaczej do tematu podejść, parafrazując klasyka to złe rozwiązanie było, nie tylko myliło się w tych przypadkach :stuck_out_tongue:

Witam, kod zwraca poprawne wyniki ale sędzia nie przyjmuje(błąd komilacji). Byc moze chodzilo o bardziej sprytne rozwiazanie.
Za kazda podpowiedz z gory dziekuje :wink:

Dla tych danych na ideone tez dostaje sukces, nie rozumiem dalej co moze byc nie tak, prosze o wyrozumialosc …

Masz takie jedno małe głupie przeoczenie które jednak potrafi zdenerwować xD

24 days later

Witam, pomoże ktoś bo już zgłupiałem? Kod niby działa.

a czy dałeś link do ostatniej wersji ?
bo mnie twój program dla 7 do dowolnej potęgi daje zawsze 7
w tym wątku jest trochę różnych danych przykładowych - sprawdź dla nich działanie twojego programu

Wprowadziłem kilka poprawek.

patrzę na twój program i zastanawiam się, czy rozumiesz co robisz, i dlaczego ? (to pytanie dotyczy algorytmu)

i pytanie szczegółowe, czy wiesz jak działa konstrukcja:

if(1 <= a,b <= 1000000000)

nie musisz mi odpowiadać, bo ja wiem :slight_smile:

sprawdź działanie twojego programu dla takich danych:

2
7 12
10 10

O Szanowni Rozkminiacze,

mam ogromna prosbe, czy moglby ktos rzucic okiem na ten kod? nie moge znalezc przyczyny, ze mam ciagle bledna odpowiedz. Rozumiem, ze sedzia nie moze sie mylic, ale ja juz nie wiem jak to znalezc, chyba trzeba kogos madrzejszego. Weryfikowalem wyniki miedzy podstawa 0 do 11 i wykladnikiem 0 do 9. Zaden blad sie nie pojawil, wszystkie wyniki zgodnie z oczekiwaniami.

podziwiam pracowitość w pisaniu :slight_smile: - ale czasem warto dłużej pomyśleć przed napisaniem

6
100 1
1 1
100 1
1 1
100 1
1 1

Mariusz,

dzieki za pomoc, testowalem tez 10 i 100 w eclipse, i mi dzialo ideone natomiast wyswietlil mi problem. Usunalem wiec nadmiarowy kod, z innych pomyslow ktore mialem i mi zaakceptowal.

23001475 2019-01-05 23:26:26
Czy umiesz potęgować
zaakceptowano
edit run
0.06
4468M
JAVA

Wspomniales ze mozna to lepiej bylo napisac. Jestem baaaaaaaardzo poczatkujacy, czy moglbys mi w wiadomosci prywatnej napisac, jak programista by to napisal? i mniej wiecej co najbardziej kulo w oczy, jestem bardzo otwarty na krytyke. Traktuje te zadanie jako mozliwosc rozwoju a nie test moich zdolnosci. Na kazde zadanie poswiecam duzo czasu, ale i dowiaduje sie nowych klasach. np tutaj o bigdecimal :Dktore nie bylo rozwiazaniem :slight_smile:

11 months later

Witam. Wiem, że wątek był poruszany wiele razy ale po przeczytaniu dyskusji dalej nie wiem gdzie leży problem mojego kodu. Testowałem wiele przypadków i zawsze program zwraca dobrą odpowiedź. Jednakże sędzia odrzuca moją pracę. Z góry dziękuję za pomoc.

#include
using namespace std;
unsigned long int ile,a,b,ktora[4];
int main()
{
cin>>ile;
for(int i=0;i<ile;i++)
{
cin >> a >> b;
if(b==0)cout<<1;
else{
ktora[0]=a%10;
ktora[1]=a * a%10;
ktora[2]=a * a * a%10;
ktora[3]=a * a * a * a%10;
if (b%4==0) cout<<ktora[3]<<endl;
else if (b%4==1) cout<<ktora[0]<<endl;
else if (b%4==2) cout<<ktora[1]<<endl;
else if (b%4==3) cout<<ktora[2]<<endl;
}

}
return 0;

}

Wybacz ale może czegoś nie widzę. Ale zrobiłem klika cout’ów żeby wyświetliły mi wyniki. I teraz to wygląda tak.
#include
using namespace std;
unsigned long long int ile,a,b,ktora[4];
int main()
{
cin>>ile;
for(int i=0;i<ile;i++)
{
cin >> a >> b;
if(b==0)cout<<1;
else{
ktora[0]=a%10; cout<<a<<" “; cout<<a%10<<endl;
ktora[1]=a * a%10; cout<<a * a<<” “; cout<<a *a%10<<endl;
ktora[2]=a * a * a%10; cout<<a * a * a<<” “; cout<<a * a * a%10<<endl;
ktora[3]=a * a * a * a%10; cout<<a * a * a * a<<” "; cout<<a * a * a * a%10<<endl;
if (b%4==0) cout<<ktora[3]<<endl;
else if (b%4==1) cout<<ktora[0]<<endl;
else if (b%4==2) cout<<ktora[1]<<endl;
else if (b%4==3) cout<<ktora[2]<<endl;
}

}
return 0;

}

Program zwraca takie wartości

999107 3
999107 7
998214797449 9
997323391634878043 3
13453960652956817745 5
3
9999197 3
9999197 7
99983940644809 9
3634939363436431109 9
6379398151447440337 7
9
99992007 3
99992007 7
9998401463888049 9
2040603067473891991 1
3661983323597490785 5
1

Co jest wynikiem (jeżeli się nie mylę) zgodnym z prawdą.Jeszcze raz dziękuję za wszelką pomoc.

Niestety poprawny jest wynik tylko dla pierwszego przypadku. W dwu pozostałych przypadkach masz zły wynik. Spróbuj znaleźć przyczynę samodzielnie. Przeanalizuj wyniki dla takich przypadków:
9
7 3
97 3
997 3
9997 3
99997 3
999997 3
9999997 3
99999997 3
999999997 3
W dwóch Twój kod daje niepoprawny wynik. Zgadnij w których… :slight_smile:
Do testowania kodu najlepiej użyć Ideone, zamiast wklejać kod też lepiej jest podać link do kodu w Ideone.

@mule Liczby na wejściu będą zawsze mniejsze od 1 000 000 000 (1 ≤ a,b ≤ 1 000 000 000). Jeżeli nie jesteś pewien czy, któryś wynik jest poprawny to sprawdź go tutaj11.

Udało się! ;D Musiałem znaleźć jeszcze jedno dno tego problemu. Bez państwa pomocy nigdy bym pewnie owego błędu nie znalazł(lub zabrało mi by to o wiele więcej czasu). Jeszcze raz Dziękuje bardzo.

Moze podpowiem gdzie lezy podstawowy problem

Pierwsza linijka zgoda. Tylko cyfra jednosci w podstawie wplywa na cyfre jednosci w wyniku. (latwo zauwazyc przy mnozeniu pisemnym)
Druga linijka niestety to nie zadziala.
przyklad:
2 do potegi 10 = 1024,
2 do potegi 20 = 1048576
cyfry jednosci sa rozne
Czyli na pewno nie bedzie dzialac dla %10.
Dla pewnej wartosci zadziala. Ja uzylem arkusz kalkulacyjny do przeliczenia kolejnych poteg dla wielu kolejnych podstaw i zauwazenia cyklicznosci. Mozna tez policzyc na kalkulatorze, na kartce zapisac tabelke.

Nie wchodząc w Twój algorytm dodałbym jeszcze jeden podstawowy błąd. Dla zwykłej tablicy w c++ musisz podać jej rozmiar jeszcze przed kompilacją. Jeśli chcesz podawać rozmiar w trakcie wykonywania zastosuj tablicę dynamiczną albo użyj bardzo wygodnego kontenera jaki jest vector. Tak nawiasem mówiąc to używanie tablicy jest tu niepotrzebne, możesz na bieżąco liczyć ostatnią cyfrę z a^b i dawać to na wyjście.

@pawoj20 dzięki za pomoc :). Naprawiłem ten błąd i SPOJ zaliczył zadanie.
@korkirw tak wiem ale jeszcze ogarniam ten temat: Uczę się C++ dopiero około 1,5 tygodnia.

3 months later

zdecydowanie, dużo mi pomogłeś, nie mogłem trafić na tę ścieżkę rozumowania. Ale udało mi się. Dziękuje.

27 days later
21 days later

Witam.
Napisałem kodzik, testuje wiele liczb i wszystko wychodzi mi poprawnie. Wrzucam do SPOJa to wyskakuje mi "błędna odpowiedź"
KOD: https://ideone.com/STeUIx14
Przeczytałem powyżej kilka różnych problemów ale w żadnym nie ujrzałem tego co mogło by mi pomóc.
Swoją drogą zauważyłem, że moje rozwiązanie na tle innych jest nietypowe.
Będę wdzięczny za znalezienie błędu.

Moim zdaniem niedużo już brakuje do zaliczenia.(dwie dodatkowe linijki lub zmiana jednej :thinking: )
Oto test pokazujący problem:
Wejście
9
987654325 4
87654325 4
7654325 4
654325 4
54325 4
4325 4
325 4
25 4
5 4
prawidłowe wyjście
5
5
5
5
5
5
5
5
5

byłem zdziwiony, że taką długą liczbę podałeś bo byłem pewien że jest podany zakres w zadaniu jest do 1 000 000. Źle odczytałem bo było do 1 000 000 000
Dzięki wielkie :stuck_out_tongue: