1 / 3
Nov 2019

Mam pytanie, w którym miejscu może być błąd ?
Dopiero zaczynam przygodę z programowaniem ^^
Chodzi o kod do zadania z PESELEM - https://pl.spoj.com/problems/JPESEL/7

#include
using namespace std;
int t,suma;
int mn[11]={1,3,7,9,1,3,7,9,1,3,1};
int main()
{
cin >>t;
for(int i=0;i<t;i++)
{ int *tab;
tab=new int[11];
for(int i=0;i<11;i++)
{
cin >>tab[i];
}
for (int i=0;i<11;i++)
{
suma+=tab[i]*mn[i];
}
if (suma%10==0){cout << “D”<<endl;}
else {cout <<“N”<< endl;}
}

return 0;

}

  • created

    Nov '19
  • last reply

    Nov '19
  • 2

    replies

  • 862

    views

  • 3

    users

  • 3

    likes

  • 2

    links

Twoje błędy to:

  1. http://discuss.spoj.com/t/jesli-zaczynasz-przeczytaj-koniecznie/34345.
  2. Błędny sposób wczytywania pesela. cin wczytuje wszystko od białego znaku do białego znaku. Ponieważ pesel jest podany jako 11-sto cyfrowa liczba bez żadnych spacji w środku więc do tab[0] będzie wpisywana jedna liczba z czym związane są dwa problemy:
    a)wyjedziesz poza zakres int-a w tab[0]
    b) nie będziesz miał co wpisać do pozostałych komórek tej tabeli
  3. Nawet jeśli poprawisz wczytywanie to i tak nie będziesz miał zaliczenia bo Twój kod zaliczy jako poprawny taki pesel 00000000000.
  4. Jak poprawić wczytywanie? Ja widzę przynajmniej dwa rozwiązania (łatwiejsze oraz bardziej skomplikowane). Nie chcę Ci na razie sugerować, bo pewnie do tego dojdziesz ale w razie kłopotów mogę dalej coś podpowiedzieć (chyba, że ktoś udzieli Ci podpowiedzi od razu :wink: )
  1. Zastanów się nad wartością zmiennej ‘suma’ po kilku iteracjach pętli.
  2. Pamiętaj użyć delete[]