Rozwiązuję zdanie ze SPOJ: http://pl.spoj.pl/problems/SKO/
"Na kartce" problem jest banalny, wydaje się, że w zakodowaniu też, ale mam problem.
Kod na ideone: http://ideone.com/IDpyB
Niby się wykonuje, ale wyniki się nie zgadzają, gdzie mogłem popełnić błąd ?
Nie możesz wykonywać obliczeń na liczbach zmiennoprzecinkowych, bo tracisz precyzję i wyniki mogą być lekko rozbieżne. Operuj wyłącznie na liczbach całkowitych. Trzeba to robić z głową. Zapewne zastanawiasz się jak policzyć pierwiastek. Otóż nie liczyć wcale. Skoro
to
Wydaje mi się że powinieneś nadać wartość początkową zmiennej tmp. Deklarujesz ją a potem przy jej użyciu sumujesz. Na początku mogą tam być jakieś śmieci.
emilios8 napisał(a):
Wydaje mi się że powinieneś nadać wartość początkową zmiennej tmp. Deklarujesz ją a potem przy jej użyciu sumujesz. Na początku mogą tam być jakieś śmieci.
Po tej poprawce niby jest "częściowo" dobrze, bo dla 2 i 3 przypadku testowego jest poprawny wynik. http://ideone.com/riGud
Czyli mogę skorzystać z tej nierówności:
Musisz w każdym razie wrócić do liczb całkowitych.
Od razu pomyśl o efektywności, nie podnoś ocen do k-tej potęgi za każdym razem na nowo tylko domnażaj czynnik z każdą pętlą:
for (k = ...) {
for (i = ...) {
//źle
//suma += poteguj(tab[i], k);
//dobrze
iloczyn[i] *= tab[i];
suma += iloczyn[i];
// tablicę "iloczyn" wstępnie wypełnij jedynkami
}
}
powinno wystarczyć.