Problem z kompilacją zadania

Problem z kompilacją zadania
T2
  • Rejestracja:prawie 4 lata
  • Ostatnio:prawie 4 lata
  • Postów:2
0

Witam,
Mam problem z zadaniem ze strony polski spoj, chodzi o zadanie " PA05_POT - czy umiesz potęgować ? ". Chodzi w nim między innymi by na ekranie konsoli wyświetlić cyfrę jedności liczby zapisanej dziesiętnie oczywiście podniesionej do danej potęgi.
Przykładowo:

  • input: 2^3 , output: 8
  • input: 3^3 , output: 7

Oto kod działa poprawnie, lecz na stronie wyskakuje błąd wykonania. Niestety nie jest to pierwsze zadanie w którym mam podobny problem. Jest ktoś w stanie pomoc w czym leży błąd ?

Kopiuj
using System;

namespace PA05_POT___Czy_umiesz_potegowac
{
    class Program
    {
        static void Main(string[] args)
        {
            int n = Convert.ToInt32(Console.ReadLine());
            int number_to_compound,compound,result;
            
            for(int i=0;i<n;i++)
            {
                number_to_compound = Convert.ToInt32(Console.ReadLine());
                compound = Convert.ToInt32(Console.ReadLine());              
            
                result = Compound(number_to_compound,compound);

                result = Record_number_unity(result);

                Console.WriteLine(result);
            }

        }
        static int Compound(int number_to_compound,int compound)
        {
            int result = 1;
            for(int i=0; i<compound; i++)
            {
                result *= number_to_compound;
            }
            return result;
        }
        static int Record_number_unity(int result)
        {
            result = result%10;

            return result;
        }
    }
}
edytowany 1x, ostatnio: Tobiasz2817
AdamWox
  • Rejestracja:ponad 7 lat
  • Ostatnio:13 minut
  • Lokalizacja:Jastrzębie-Zdrój
  • Postów:2157
0

Treść błędu. Nie wróże z fusów...

T2
  • Rejestracja:prawie 4 lata
  • Ostatnio:prawie 4 lata
  • Postów:2
0

@AdamWox: A no tak wybacz, mój błąd bÅÄd wykonania (NZEC).

AdamWox
  • Rejestracja:ponad 7 lat
  • Ostatnio:13 minut
  • Lokalizacja:Jastrzębie-Zdrój
  • Postów:2157
0

Po kolei:

  1. Nie Convert, tylko int.TryParse()
  2. Po co jest to pierwsze ReadLine() poza pętlą?
  3. NZEC oznacza Non Zero Exit Code - twój program się nigdy nie kończy przez to jak to jest zaprogramowane

Opakuj to w try oraz catch. Może dostajesz wyjątek, a spoj tylko tak błąd pokazuje. Każdy program musi zakończyć swoje działanie z kodem 0, twój na spoju tego nie robi.

edytowany 1x, ostatnio: AdamWox
T2
1. Dzięki, poprawie 2. Określa ilość prób. 3. Nie rozumiem zbytnio, jak to że nigdy się nie kończy ???
AdamWox
W jakich przypadkach dostajesz ten błąd? W jakim momencie?
T2
W momencie gdy na stronie polski spoj podaje kod do analizy by mi uznało zadanie. To wtedy właśnie taki błąd otrzymuje i zadanie zostaje odrzucone.
T2
Chyba już wiem w czym leży problem. "Opis każdego przypadku podany jest w jednym wierszu, zawierającym dwie liczby naturalne a i b oddzielone pojedynczym odstępem (spacją)" niestety lecz nie wiem jak to zrobić by wczytać wartości zostały oddzielone spacja i poprawnie wczytane do zmiennej.
AdamWox
  • Rejestracja:ponad 7 lat
  • Ostatnio:13 minut
  • Lokalizacja:Jastrzębie-Zdrój
  • Postów:2157
1

Chyba nie powinienem ci wrzucać gotowca... Trudno, ja bym to zrobił tak:

Kopiuj
                string input = Console.ReadLine();

                if(input.Contains(" "))
                {
                    string[] values = input.Split(null);
                    string firstValue = values[0].Trim();
                    string secondValue = values[1].Trim();
                    int number_to_compound, compound, result;

                    if (int.TryParse(firstValue, out number_to_compound) && int.TryParse(secondValue, out compound))
                    {
                        result = Compound(number_to_compound, compound);
                        result = Record_number_unity(result);
                        Console.WriteLine(result);
                    }
                }

#edit
Oczywiście trochę pod siebie musisz dostosować ;-)

edytowany 1x, ostatnio: AdamWox
T2
Niestety niektórych funkcji jeszcze nie znam, lecz przeanalizuje je sobie i sprawdzę działanie. Dzięki wielkie , pozdrawiam :)
AdamWox
Właśnie dlatego nie powinieneś był dostał gotowca ale tak było szybciej dla mnie. Jak ci zależy to poświęcisz czas, poczytasz i będziesz wiedział co do czego. Good luck ;-)
ŁF
A co, jeśli input nie zawiera spacji? Powinien polecieć wyjątek, bo coś z danymi nie tak jest, a tu cisza. Po co null jako argument Split? Po co Trim, skoro Split usunie wszystkie spacje przy tworzeniu tablicy? Skąd wiesz, że będziesz mieć dwa wyniki (values.Count() > 1), skoro na inpucie może pojawić się sama spacja? Po co TryParse, skoro przy nieprawidłowych danych powinien polecieć wyjątek? To SPOJ, dane wejściowe będą poprawne, nie trzeba dodatkowych warunków. I wreszcie - zrobiłeś kosmetyczne zmiany, które w żaden sposób nie naprawiają istoty problemu.
AdamWox
Ja nigdy nie pisałem na spoj, nigdy z tego nie korzystałem. Próbuję rozwiązać problem jaki ma autor. Skąd mam wiedzieć, że dane wejściowe będą poprawne?
ŁF
Moderator
  • Rejestracja:ponad 22 lata
  • Ostatnio:3 dni
1
  1. To nie kompilacja, tylko wykonanie kodu - NZEC oznacza, że program zwrócił błąd, a zatem zaczął się wykonywać.
  2. Nie kompilujesz zadania, tylko kod programu, który wykonuje dane zadanie.
  3. Last, but not least:
Kopiuj
        static int Compound(int number_to_compound,int compound)
        {
            int result = 1;
            for(int i=0; i<compound; i++)
            {
                result *= number_to_compound;
            }
            return result;
        }

Uruchom to u siebie dla np. 2 i 32, albo jakiejkolwiek kombinacji liczby i potęgi wychodzącej poza zakres int.
Brute force wymaga potęgowania modulo 10.

Jednak optymalne rozwiązanie zadania nie wymaga żadnego potęgowania, wystarczy tylko znaleźć jedną dość prostą regułę. Zobacz, ostatnia cyfra bierze się z mnożenia poprzedniej cyfry, teraz popatrz na to, w jakie prawidłowości układają się ostatnie cyfry kolejnych potęg:

Kopiuj
0^n % 10 === 10^n % 10: 0, 0, 0, ...
1^n % 10 === 11^n % 10: 1, 1, 1, ...
2^n % 10: 2, 4, 8, 6, 2, 4, 8, 6...
3^n % 10: 3, 9, 7, 1, 3, 9, 7, 1, ...
4^n % 10: 4, 6, 4, 6, 4, 6, ...
5^n % 10: 5, 5, 5, 5, ...

analogiczne prawidłowości znajdziesz dla wszystkich liczb z przedziału 0-9. Wystarczy wrzucić to jako stałe do tablicy 2d, wiersz wybrać na podstawie ostatniej cyfry number_to_compound, kolumnę na podstawie compound % okres. Możesz spokojnie możesz założyć, że okres jest stały i wynosi 4. Całe działanie programu sprowadzi się do dwóch dzieleń modulo (przy czym drugie dzielenie możesz zastąpić wyczyszczeniem bitów od drugiego wzwyż, licząc od zera, bo tak działa dzielenie przez potęgi dwójki) i na podstawie wyniku wyciągnięcie odpowiednich danych z tablicy. Ewentualnie musisz jeszcze sprawdzić, czy potęga to 0 i zwrócić wtedy 1.Tadam!


edytowany 1x, ostatnio: ŁF
T2
Gdy sprawdzałem na stronie SPOJ co się dzieje jeśli wczytam wartości w ten sposób czyli wartość spacja wartość a nie uwzględnię tego w kodzie to SPOJ nie traktuje dwóch wartości jako wczytane lecz tylko tą jedną co jest z brzegu dlatego program jest ciągle uruchomiony i dlatego NZEC bo się po prostu nie kończy bo SPOJ nie próbuje wprowadzić więcej wartości. Chyba, że coś złe zrozumiałem. A to co kolega wyżej wrzucił działa poprawnie lecz pojawią się kolejny błąd "przekroczono limit czasu".
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)