• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zadanie "Pesel" SPOJ

Cloud VPS
0 głosów
570 wizyt
pytanie zadane 3 października 2019 w SPOJ przez Bartek K. Nowicjusz (230 p.)
edycja 4 października 2019 przez Bartek K.

Pytanie dotyczy fragmentu kodu napisanego na potrzeby zadania "Pesel" ze spoja. Dla przykładu "44051401458" kod przekształca prawidłowo wszystkie cyfry oprócz piątej i dziewiątej, które powinny zostać niezmienione, lecz program zamienia 1 na 7, a 4 na 28. Pozostałe niezmieniane cyfry czyli pierwsza i ostatnia zgadzają się. Nie mam pojęcia dlaczego tak się dzieje.

Program ma pobrać 11-cyfrowy pesel, następnie na każdej cyfrze ma wykonać następujące operacje:

Pierwszą cyfrę mnożymy przez 1,
drugą cyfrę mnożymy przez 3,
trzecią cyfrę mnożymy przez 7,
czwarta cyfrę mnożymy przez 9,
piątą cyfrę mnożymy przez 1,
szóstą cyfrę mnożymy przez 3,
siódmą cyfrę mnożymy przez 7,
ósmą cyfrę mnożymy przez 9,
dziewiątą cyfrę mnożymy przez 1,
dziesiątą cyfrę mnożymy przez 3,
jedenastą cyfrę mnożymy przez 1.

Następnie ma to zsumować i sprawdzić czy ostatnia cyfra to 0.

#include <iostream>

using namespace std;

int main()
{
    unsigned long long pesel, n=1;
    cin>>pesel;
    int pesel2[11];

    for(int i=0; i<11; i++)
    {
        pesel2[i]=(pesel/n)%10;
        n=n*10;
    }

    int suma=0;

    for(int i=0; i<11; i++)
    {
        switch(i)
        {
        case 1:
        case 5:
        case 9:
            pesel2[i]=pesel2[i]*3;
            break;
        case 2:
        case 6:
            pesel2[i]=pesel2[i]*7;
            break;
        case 3:
        case 7:
            pesel2[i]=pesel2[i]*9;
            break;
        }
        cout<<pesel2[i]<<" ";
    }
    return 0;
}

 

komentarz 3 października 2019 przez Szahid Pasjonat (20,970 p.)
Podaj treść
1
komentarz 3 października 2019 przez tkz Nałogowiec (42,060 p.)
błąd w switchu, zobacz jak go zapisałeś.
komentarz 4 października 2019 przez Bartek K. Nowicjusz (230 p.)
Nie wiem co jest nie tak w tym switchu.
komentarz 4 października 2019 przez Bartek K. Nowicjusz (230 p.)
edycja 4 października 2019 przez Bartek K.
Problemem okazało się to, że pętla rozdzielająca pesel i wpisująca pojedyncze cyfry do tabeli wpisywała te cyfry w odwrotnej kolejności przez co mnożenie w switchu wykonywało się  w kolejności:

8*1, 5*3, 4*7, 1*9, 0*1, 4*3, 1*7, 5*9, 0*1, 4*3, 4*1

zamiast

4*1, 4*3, 0*7, 5*9, 1*1, 4*3, 0*7, 1*9, 4*1, 5*3, 8*1

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
2 odpowiedzi 5,819 wizyt
pytanie zadane 28 kwietnia 2016 w C i C++ przez drive879 Nowicjusz (160 p.)
0 głosów
1 odpowiedź 911 wizyt
pytanie zadane 25 lipca 2018 w SPOJ przez Deriquest Użytkownik (550 p.)
0 głosów
1 odpowiedź 460 wizyt
pytanie zadane 1 listopada 2019 w C i C++ przez creend Gaduła (4,700 p.)

93,459 zapytań

142,453 odpowiedzi

322,722 komentarzy

62,837 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...