120 / 237
Feb 2017

In

1
10 2

Poprawny out

0

Zauważyłeś co trzeba, tylko powywalaj teraz te ify (uprzedzając, switch-case to też if). Nie dodawaj żadnej tablicy, tylko pomyśl nad zgrabniejszym algorytmem.

12 days later

Może przestań potęgować, komputer potrafi wiele, ale podności miliard do potegi o wykladniku miliard to bezsens, nawet sobie nie wyobrażam, ile to by musiałobyć znaków w konsoli :slight_smile:

25 days later

Mam problem z wprowadzaniem błędnych danych i chyba przez to mój program wyrzuca błąd "Błędna odpowiedź".

W treści zadania jest napisane:
"W pierwszej linii wejścia znajduje się jedna liczba całkowia D (1≤D≤10), oznaczjąca liczbę przypadków do rozważenia. Opis każdego przypadku podany jest w jednym wierszu, zawierającym dwie liczby naturalne a i b oddzielone pojedynczym odstępem (spacją), takie, że (1 ≤ a,b ≤ 1 000 000 000)."

Więc zrobiłem ograniczenia na wejściu tzn:

 do
            {
                D = Convert.ToInt32(Console.In.ReadLine());
            } while (1 > D || D > 10);

oraz

do
                {
                    ab = Console.In.ReadLine();
                    a1 = Convert.ToInt32(ab.Substring(0, ab.IndexOf(' ') + 1));
                    b = Convert.ToInt32(ab.Substring(ab.IndexOf(' ') + 1));
                } while (1 > a1 || a1 > 1000000000 || 1 > b || b > 1000000000);

, tak aby po wpisaniu złych danych, pętla sprawdzała warunki i w wypadku wprowadzenia złych danych, zaczynała wczytywanie jeszcze raz, tak aby nie było możliwości wprowadzenia złych danych. Czy to podejście jest niepoprawne w kontekście testów wykonywanych przez sędziego? Bo za każdym razem jak podaję nawet bardzo wielkie liczby, ale mieszczące się w założeniach to na ideone.com program działa i wyniki są poprawne. Oczywiście program korzysta z zasady wyznaczania ostatniej cyfry a nie z potęgowania :slight_smile:

Na spoj wszystkie dane wejściowe są zgodne z specyfikacją podaną w danym zadaniu. Twoje ograniczenia wejścia są zatem zbędne.

8 days later

nie wiem - ja uruchomiłem ten kod i jest AC

usuń link do kodu z twojego postu (źle wstawiony, nawiasem mówiąc)

kod lepiej jest przekazywać poprzez link do ideone.com6

Dzisiaj wkleiłem dokładnie ten sam kod i działa, a nie zmieniałem nic. Wczoraj jeszcze nie działał. Dziwne.

Tak, jak pisałem poprzednio, usuń link do programu - niech inni mają szansę na samodzielne rozwiązanie problemu :slight_smile:

Nie używaj zmiennych globalnych i funkcji endl. Nie wiem po co ci nowa linia po każdym cin.

Przeglądnij ten temat jeszcze raz, z funkcją pow sędzia i tak ci wypluje 'przekroczony limit czasu'. Najlepiej wypisz sobie na kartce 10 pierwszych potęg każdej z liczb i wtedy napisz program jeszcze raz

Cześć
Da się jakoś przyspieszyć mój program żeby mieścił się w czasie, czy lepiej napisać innym sposobem?
Co powinno się stać jeśli spróbuję rozważyć np.12 przypadków, w zadaniu jest max 10?

#include <iostream>
#include <math.h>

using namespace std;

int a[9],b[9], D;
long long potega;

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

    for(int c=0; c<D; c++)
    {
        cin >> a[c];
        cin >> b[c];
        cout << endl;
    }
    for(int c=0; c<D; c++)
    {

        a[c]=a[c]%10;
        if(b[c]==0)         cout << 1 <<endl;
        else
        {
            if(b[c]%4==1)
            {
                b[c]=1;
            }
            else if(b[c]%4==2)
            {
                b[c]=2;
            }
            else if(b[c]%4==3)
            {
                b[c]=3;
            }
            else if(b[c]%4==4)
            {
                b[c]=4;
            }
            else if(b[c]%4==0)
            {
                b[c]=4;
            }
            potega = pow(a[c], b[c]);

            cout << potega%10 <<endl;
        }
    }
    return 0;
}
8 days later

http://ideone.com/0eyGsx14

Wyskakuje mi błąd, że za wolno chodzi. Domyślam się, że trzeba dać jakieś z góry założenia? Jakaś podpowiedź jak to łatwo zauważyć? Dodatkowo zastanawia mnie dlaczego program wyświetla błędne wyniki dla dużych potęg? Widzi ktoś jakieś błędy?

Z góry dzięki za każdą pomoc, pozdrawiam! :slight_smile:

Pierwsze co powinienes zrobic to sprawdzic maksymalny test, potem przeczytac te 130 odpowiedzi powyzej i dopiero dopisac swoje pytanie. Zadanie jest proste ale wymaga inengo podejscia. W pierwszych 5 odpowiedziach masz rozwiazanie twojego problemu, nawet ktos napisal co musisz zrobic. Tego testu twoj program nie przechodzi.
1
1000000000 1000000000

1 month later

Witam.
Napisałem dla treningu kod. Wydaje mi się że działa dobrze. Nie mogę znaleźć błędu. Jakieś propozycje co to liczb do sprawdzenia.
Pozdrawiam.
Konrad

Wejście jak w treści zadania. W pierwszej linii ilość testów. W następnych testowane pary liczb.

przykładowy test:
10
0 0
3 0
0 5
10 1
1 44
2 12
3 5
99999999 3
11111111 99999999
22222 0
1
1
0
0
1
6
3
9
1
1
czas wykonania programu to 0 sekund

usuń swój kod (poprawne i bliskie poprawnym kody po wyjaśnieniu problemu nie powinny być prezentowane - niech inni też mają szanse samodzielnie rozwiązać problem)

nie ma takiej pary liczb (w zakresie podanym w zadaniu), dla której twój program zwraca błędna wartość - niemniej wyjście programu nie spełnia warunków podanych w zadaniu

Kod usunięty. Sorry to moje pierwsze kroki na portalu i oczywiście nie przeczytałem regulaminu.

Dlaczego wyjście nie spełnia warunków?(linie z czasem wykonania zadania usuwam gdy sprawdzam kod).