To co masz w postscriptum jest ważne. SPOJ odróżnia INPUT od OUTPUT. Jeżeli oba nie są związane to nie stosując się do tego robisz sobie sam krzywdę:
- Marnujesz swój czas na stworzenie tablic, osobnych pętli czy pisanie nawiasów []
- W przypadku trudniejszych zadać kod może zostać od razu odrzucony, bo chwilowo zaalokowana pamięć przekroczyła dostępny limit
Poza tym pamiętaj o zasadzie DRY (Don't Repeat Yourself). Takie coś jest bez sensu:
tab[j][11]=(tab[j][0]+tab[j][1]*3+tab[j][2]*7+tab[j][3]*9+tab[j][4]+tab[j][5]*3+tab[j][6]*7+tab[j][7]*9+tab[j][8]+tab[j][9]*3+tab[j][10]);//%10;
Lepiej zrobić to za pomocą pętli i tablicy - ja zrobiłem to kiedyś tak:
#include <iostream>
#include <cmath>
#include <string>
int main()
{
const size_t pesel_size = 11;
int model_validation[pesel_size] = { 1, 3, 7, 9, 1, 3, 7, 9, 1, 3, 1 };
int count;
std::cin >> count;
while (count--)
{
std::string str_pesel;
std::cin >> str_pesel;
int sum = 0;
for (size_t j = 0; j < pesel_size; j++)
{
sum += (str_pesel[j] - '0') * model_validation[j];
}
std::cout << (sum % 10 == 0 ? "D" : "N") << "\n";
}
}
Tutaj jest niewiele kodu, który można by ładnie wydzielić. Zazwyczaj chodzi o to by kod dzielić na funkcje i użyteczne klasy, aby móc łatwo podzielić sobie pracę na paczki. W ten sposób możesz łatwo planować zadania i naprawiać błędy. Od razu wiadomo gdzie szukać błędu, a main może wtedy służyć po prostu jako szkielet (spis treści). Na tym zadaniu tak średnio widać zalety programowania obiektowego (mało kodu, mało funkcji o różnych zadaniach można wydzielić).
Tutaj właściwie jedyne co można by zrobić to stworzenie klasy pesel, która będzie miała operator >> i metodę sprawdzającą poprawność. Przykładowy schemat:
#include <iostream>
#include <cmath>
#include <string>
class Pesel
{
private:
const static size_t size = 11;
const static int model_validation[size];
std::string m_data;
public:
bool is_good();
friend std::istream& operator>> (std::istream& in, Pesel& pesel);
};
const int Pesel::model_validation[]{ 1, 3, 7, 9, 1, 3, 7, 9, 1, 3, 1 };
int main()
{
int count;
std::cin >> count;
while (count--)
{
Pesel pesel;
std::cin >> pesel;
std::cout << (pesel.is_good() ? "D" : "N") << "\n";
}
}