Kod dajemy w znacznikach dostępnych pod ctrl + shift + c albo lepiej linkujemy do ideone, ale na szybko 2 sprawy:
1) gdzie zerujesz zmienną wynik? najlepiej wszystkie zmienne poza n przenieś do pętli for (int i...)
2)zamiast tego potworkahelpString = pesel[0]; stringstream(helpString) >> number; wynik = (number * 1) + wynik;
daj wynik = ((pesel[0] - '0') * 1) + wynik;
albo lepiej zapisz te mnożniki do tablicy i uruchom w pętli. Dla komputera wszystko jest liczbą, wiec jak od char-a z cyfrą odejmiesz kod zera, dostaniesz tą cyfrę.
Kod wstawiony prawidłowo i w sumie logiczny, choć ja zdziwiłem się, że wczytujesz to jako int a nie string. Ale co kto lubi. Jak na mnie dziwne i nieprzejrzyste formatowanie (troche mi zajęło znalezienie, gdzie kończy się while(pesel)), ale - ponownie - co kto lubi. Szczególnie, gdy ktoś zaczyna zabawę ze SPOJem. Niemniej polecam tutorial o formatowaniu kodu http://discuss.spoj.com/t/formatowanie-kodu/18265/2 Z pewnością nie jesteś też, jak mam to w zwyczaju nazywać, leniem, który nie inicjalizuje w odpowiednim miejscu zmiennych.
Twój program opiera się na dwóch pętlach - for i while. Pierwsza z nich wykonuje się od j = 0 do j < t, czyli łącznie t razy i wszystko jest ok. Problem zaczyna się w while. Dekrementujesz tam i. Brakuje Ci jednak w for przywrócenia jej odpowiedniej wartości dla każdego testu.
Po tej poprawce jest AC.
Napisałeś na forum po jednej próbie rozwiązania zadania. Na przyszłość próbuj dalej bo jak widzisz brakowało Ci niewiele
PS
Dochodzi druga w nocy a ja od 10 haruję w książkach i programach więc jeżeli popełniłem błąd (w szczególności to AC tylko mi się przywidziało, ale chyba aż tak źle ze mną nie jest ) to bardzo przepraszam.
Witam Panowie. Mam problem, napisałem kod. Kompiluje i działa w Xcode oraz w ideon.com. SPOJ zwraca mi "błędna odpowiedź". Gdzie popełniam błąd?
edit: zauważyłem, że po kilkunastu testach wyniki są złe. Czy powinienem zerować zmienne "string" po każdym kolejnym przebiegu pętli do-while?
edit2: nie zerowałem zmiennej "suma", po poprawieniu działa
czy ktoś może mi wytłumaczyć dlaczego mój program wyłącza się po jednej pętli? W C::B bo spoj o dziwo akceptuje
tu byl kod
a skoro już tu jestem:
1. czy istnieje mozliwośść podania łąńcucha cyfr (bez spacji) tak aby program potraktował to jako oddzielne cyfry i wpisał do tablicy intów?
2. mógłbym prosić o jakiś code review? co mozna zrobic lepiej
3. podejrzewam, ze są tu pewne błędy których nie przewidziałem (jak zawsze). gdzie one są?
Dlaczego nie używasz typu string
przeznaczonego dla C++
, a męczysz się tablicami? Program kończy się właśnie z powodu tej pomyłki - tworzy Len
elementową tablicę czyli tablicę o wyrazach 0,1,2,...,Len-1
, a następnie pod wyraz Len
(którego w tej tablicy nie ma) dostawiasz znak końca '\0'
. Poza tym zabrakło Ci jednego else'a
przy if (j == 2||j == 6)
Witam. Umieszczam poniżej kod który napisałem do zadania. Generalnie kompilator nie pokazuje błędów tak samo jak ideone ale spoj cały czas nie uzanje rozwiązania - pisze że błędna odpowiedź. Nie moge się dopatrzeć co mogę mieć źle. Może mi ktoś coś podpowiedzieć?
Tutaj jest mój kod z ideone: tu był kod z ideone
Program śmiga ale sędzia odpowiada, że jest błąd. Proszę o pomoc, bo siedzę już dość długo nad tym i tego błędu dalej nie widzę
@edit. problem trywialny, rozwiązany.
już kilka razy pisałaś na forum, zapewne też czytałaś wątki poświęcone zadaniom, z którymi miałaś kłopoty - więc powinnaś zauważyć, że preferowaną metodą przekazywania kodu jest link do ideone.com6
domyślam się, że programujesz w środowisku, w którym debugowanie nie jest łatwe (lub dostępne)
masz więc 2 moźliwości:
a) zmienić środowisko na przyjazne (np. Visual Studio Express, choć na początku to ono wydaje się wręcz wrogie, ale można się przyzwyczaić, za to możliwości ma mnóstwo)
b) pracować tak jak robiono to 30 lat temu - czyli wstawiać dodatkowe wydruki w programie
np:
if (kontrola) { for (int i = 0; i <=10; i++) cout >> tab_pesel[i] >> ' '; cout >> endl; }