4 / 59
Sep 2016

Gdzie jest błąd ?

include

include

using namespace std;

int main()
{
string pesel, helpString;
int n, wynik = 0, number, helpVar;
cin >> n;

    for(int i = 1; i <= n; i++)
    {
        cin >> pesel;

        helpString = pesel[0]; stringstream(helpString) >> number; wynik = (number * 1) + wynik;
        helpString = pesel[1]; stringstream(helpString) >> number; wynik = (number * 3) + wynik;
        helpString = pesel[2]; stringstream(helpString) >> number; wynik = (number * 7) + wynik;
        helpString = pesel[3]; stringstream(helpString) >> number; wynik = (number * 9) + wynik;
        helpString = pesel[4]; stringstream(helpString) >> number; wynik = (number * 1) + wynik;
        helpString = pesel[5]; stringstream(helpString) >> number; wynik = (number * 3) + wynik;
        helpString = pesel[6]; stringstream(helpString) >> number; wynik = (number * 7) + wynik;
        helpString = pesel[7]; stringstream(helpString) >> number; wynik = (number * 9) + wynik;
        helpString = pesel[8]; stringstream(helpString) >> number; wynik = (number * 1) + wynik;
        helpString = pesel[9]; stringstream(helpString) >> number; wynik = (number * 3) + wynik;
        helpString = pesel[10]; stringstream(helpString) >> number; wynik = (number * 1) + wynik;


        if(wynik > 0)
        {
            if((wynik % 10) == 0)
            {
                cout << "D" << endl;
            }
            else
            {
                cout << "N" << endl;
            }
        }
        else
        {
            cout << "N" << endl;
        }
    }
}

return 0;

}

  • created

    Jun '16
  • last reply

    Jan '22
  • 58

    replies

  • 4.4k

    views

  • 28

    users

  • 7

    likes

  • 14

    links

Frequent Posters

There are 58 replies with an estimated read time of 5 minutes.

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 potworka
helpString = 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ę.

1 month later

Hej,
zadanie wykonałem z użyciem string i konwersji string na int. Da się to zadanie wykonać operując bezpośrednio na int ? jak?
Pozdrawiam

29 days later

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 :wink: 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 :wink:

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 :wink:) 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 :wink:

Dzięki, wystarczyło wyzerować zmienną "suma". Wczoraj siedziałem do późna i przegapiłem to :wink:

to teraz zmień link do twojego programu, aby inni nie mieli za łatwo :slight_smile:

Jednak nie do końca jest spoko, pesele typu 35626738378, 46473647364 są fałszywe ale przechodzą. Chyba system oblicznia PESEL'u nie bierze pod uwagę takich możliwości.

3 months later

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)

2 months later

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

In

4
44051401458
12345678901
44051401458
12345678901

Poprawny out

D
N
D
N

Jak to poprawisz, to powinno być AC.

Faktycznie kiedy wpisywałem przykład który pokazałeś powyżej to miałem niepoprawne wyjście. Na szczęście błąd usunąłem i spoj przyjął rozwiązanie. Dzięki za pomoc :slight_smile:

Kod z poprzedniego postu usunąłem.

29 days later

po długich :slight_smile: poszukiwaniach stwierdziłem, że program daje błędne obie odpowiedzi dla testu:

2
00000000000
91111111118

pierwszy błąd jest oczywisty, drugi już nie

Zrozumiałem, zmieniłem, jest i AC. Dzieki serdeczne za pomoc.

22 days later

http://ideone.com/7x6LEo65

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ę :confused:

@edit. problem trywialny, rozwiązany.

10 months later