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

SPOJ Pesel Zła odpowiedź

VPS Starter Arubacloud
0 głosów
303 wizyt
pytanie zadane 28 sierpnia 2019 w C i C++ przez Psz3mo Mądrala (5,030 p.)

Mam taki problem z zadaniem SPOJ dokładnie z tym: https://pl.spoj.com/problems/JPESEL/

Program działa ale dla dwóch peseli (przykładowych z tego zadania) zawsze wyświetla że ten drugi jest poprawny, a według SPOJ-a nie powinien być oto fragment kodu:

int peselliczby[11];
            int j =0;
            for(int i = 0; i<=10; i++)
            {
                peselliczby[j]=pesel % 10;
                pesel/=10;
                j++;
            }
            int calasuma = 0;
            int suma[11];
            suma[0] = peselliczby[0] *1;
            suma[1] = peselliczby[1] *3;
            suma[2] = peselliczby[2] *1;
            suma[3] = peselliczby[3] *9;
            suma[4] = peselliczby[4] *7;
            suma[5] = peselliczby[5] *3;
            suma[6] = peselliczby[6] *1;
            suma[7] = peselliczby[7] *9;
            suma[8] = peselliczby[8] *1;
            suma[9] = peselliczby[9] *3;
            suma[10] = peselliczby[10] *1;
            int k = 0;
            for(int i = 0; i<=10; i++)
            {
                calasuma += suma[k];
                k++;
            }
            //cout<<calasuma<<endl;
            if(calasuma%10 == 0)
            {
                cout<<"D"<<endl;
            }
            else if(calasuma%10 != 0)
                cout<<"N"<<endl;

Jeśli chcecie to mogę wysłać cały kod.

1 odpowiedź

0 głosów
odpowiedź 28 sierpnia 2019 przez tangarr Mędrzec (155,140 p.)
Masz zły mnożnik dla elementu suma[8];
komentarz 28 sierpnia 2019 przez Psz3mo Mądrala (5,030 p.)
No tak chyba w życiu tego bym nie zauważył. Dzięki
komentarz 28 sierpnia 2019 przez tangarr Mędrzec (155,140 p.)

Teraz uwagi do kodu:
1. Twoje pętle są szalone. Zamiast

int j =0;
for(int i = 0; i<=10; i++)
{
    // jakiś kod
    j++;
}

powinieneś zrobić

for(int j = 0; j<=10; j++)
{
    // jakiś kod
}

2. Tablica suma jest niepotrzebna. Możesz od razu modyfikować zminna calasuma

calasuma += peselliczby[0] *1;
calasuma += peselliczby[1] *3;
calasuma += peselliczby[2] *1;
calasuma += peselliczby[3] *9;
calasuma += peselliczby[4] *7;
calasuma += peselliczby[5] *3;
calasuma += peselliczby[6] *1;
calasuma += peselliczby[7] *9;
calasuma += peselliczby[8] *7;
calasuma += peselliczby[9] *3;
calasuma += peselliczby[10] *1;

3. Możesz ograniczyć ilość kodu dodając tablicę przechowującą liczniki

int pesel[11];
int liczniki[] = {1,3,1,9,7,3,1,9,7,3,1};
int calasuma=0;

for (int i=0; i<11; i++) {
    calasuma += pesel[i]*liczniki[i];
}

 

Podobne pytania

0 głosów
1 odpowiedź 473 wizyt
pytanie zadane 22 lutego 2023 w C i C++ przez alfutek Początkujący (360 p.)
0 głosów
1 odpowiedź 367 wizyt
pytanie zadane 1 listopada 2019 w C i C++ przez creend Gaduła (4,700 p.)
0 głosów
0 odpowiedzi 433 wizyt
pytanie zadane 3 października 2019 w SPOJ przez Bartek K. Nowicjusz (230 p.)

92,980 zapytań

141,943 odpowiedzi

321,189 komentarzy

62,307 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...