Siema. Podłączam się do tematu.
Mianowicie mam napisany program, wszystko ładnie liczy, testowane na wszystkie mozliwe sposoby (ponizej link do ideone), ale sędzia nadal krzyczy, ze błędne rozwiązanie.
Wiem, że da się to rozwiązać troche krócej poprzez zastosowanie tablicy, ale chciałbym wiedzieć gdzie ja popełniłem błąd.
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
Witam. Wie ktoś może dlaczego sędzia pokazuje "błędna odpowiedź"? Wydaje mi się, że w każdym możliwym przypadku jest prawidłowa, ale może coś przeoczyłem:
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
Witam. Przejrzałem forum i wciąż nie wiem dlaczego według spoja kod jest błędny.
http://ideone.com/sc5h436
Liczę na waszą pomoc.
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;
}
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!
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
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