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

SPOJ PESEL bledna odpowiedz

Object Storage Arubacloud
0 głosów
581 wizyt
pytanie zadane 29 sierpnia 2018 w SPOJ przez krawiecki Początkujący (490 p.)
edycja 2 września 2018 przez Eryk Andrzejewski

Spoj nie wyrzuca mi błędną odpowiedź na tym zadaniu, dla danych testowych działa, chciałem wrzucić kod ale wyskoczył mi komunikat "Twoje pytanie dotyczy zadania z serwisu SPOJ?
Nie psuj zabawy innym - nie umieszczaj całego kodu i zapoznaj się z tym tematem." więc może jest ktoś komu mógłbym podesłać kod i by sprawdził co jest nie tak? Ewentualnie mogę edytować post i wrzucić kilka linijek kodu a nie cały ,ale chyba coś takiego nie ma sensu.
 

#include <iostream>

using namespace std;

int main(int argc, const char * argv[])
{
    
    long int pesel;
    long int cyfra[11];
    int suma=0;
    int k;
    
    cin >> k;
    
    for (int i=0; i<k; i++)
    {
        cin >> pesel;
        cyfra[10] = (pesel % 10)*1;
        cyfra[9] = ((pesel/10) % 10)*1;
        cyfra[8] = ((pesel/100) % 10)*3;
        cyfra[7] = ((pesel/100) % 10)*9;
        cyfra[6] = ((pesel/1000) % 10)*7;
        cyfra[5] = ((pesel/10000) % 10)*3;
        cyfra[4] = ((pesel/100000) % 10)*1;
        cyfra[3] = ((pesel/1000000) % 10)*9;
        cyfra[2] = ((pesel/10000000) % 10)*7;
        cyfra[1] = ((pesel/100000000) % 10)*3;
        cyfra[0] = ((pesel/1000000000) % 10)*1;
        
        for (int i=0; i<11; i++)
        {
            suma+=cyfra[i];
        }
        
        if (suma > 0)
        {
            if (suma % 10 == 0)
                cout << 'D' << endl;
            else
                cout << 'N'<< endl;
            
        }
        else cout << 'N' << endl;
    }
    
    suma = 0;
    
    return 0;
}

 

komentarz 30 sierpnia 2018 przez niezalogowany
Tak naprawdę nikt tego nie przestrzega - spójrz na byle jaki temat z kategorii SPOJ (tak dałeś złą kategorię :P (powinno być Programowanie -> SPOJ)). Moim skromnym zdaniem nie należy prosić o pomoc w przypadku zadań z trwających konkursów np FRAKTAL. Wrzuć cały kod. Gdy uzyskasz pomoc kod możesz usunąć.
1
komentarz 30 sierpnia 2018 przez criss Mędrzec (172,590 p.)
Po prostu wrzuć kod w spoiler. Jak klikniesz na ikonke bloczka kodu (ostatnia, symbol {...}), to wejdź w zakładke Zaawansowane i tam zaznacz checkbox "Domyślnie zablokuj blok kodu" (strasznie nieadekwatna nazwa checkboxa, no ale cóż..)
komentarz 2 września 2018 przez J0ker Pasjonat (15,400 p.)

@krawiecki, Też kiedyś robiłem to zadanie i też chyba ciągle miałem błędy aż rzuciłem, traktując, że coś jest źle w Oracle tego zadania.

komentarz 2 września 2018 przez niezalogowany

@J0ker gdybyś nie dał tu komentarza to bym już nigdy nie zajrzał do tego tematu :D

1 odpowiedź

0 głosów
odpowiedź 2 września 2018 przez niezalogowany
wybrane 3 września 2018 przez krawiecki
 
Najlepsza
        cyfra[10] = (pesel % 10)*1;
        cyfra[9] = ((pesel/10) % 10)*1;
        cyfra[8] = ((pesel/100) % 10)*3;
        cyfra[7] = ((pesel/100) % 10)*9;
        cyfra[6] = ((pesel/1000) % 10)*7;
        cyfra[5] = ((pesel/10000) % 10)*3;
        cyfra[4] = ((pesel/100000) % 10)*1;
  1. Drugą liczbę trzeba przemnożyć przez 3, a trzecią przez 1. 
  2. Zgubiłeś jedno zero w kolejnych przypadkach zaczynając od cyfra[7]
  3. Gdy masz kilka zagnieżdzonych pętli ich iteracje powinny mieć różne nazwy. Inaczej nie wiesz której używasz (no chyba, że wiesz :D).
  4. Zmienna suma powinna być zerowana przy każdej iteracji pętli.

Poprawny kod z opisem zmian:

#include <iostream>

using namespace std;

int main(int argc, const char * argv[])
{

	long int pesel;
	long int cyfra[11];
	int suma = 0;
	int k;

	cin >> k;

	for (int i = 0; i<k; i++)
	{
		cin >> pesel;
		cyfra[10] = (pesel % 10) * 1;
		cyfra[9] = ((pesel / 10) % 10) * 3;   // tu było 1
		cyfra[8] = ((pesel / 100) % 10) * 1;  // tu było 3
		cyfra[7] = ((pesel / 1000) % 10) * 9;
		cyfra[6] = ((pesel / 10000) % 10) * 7;
		cyfra[5] = ((pesel / 100000) % 10) * 3;
		cyfra[4] = ((pesel / 1000000) % 10) * 1;
		cyfra[3] = ((pesel / 10000000) % 10) * 9;
		cyfra[2] = ((pesel / 100000000) % 10) * 7;
		cyfra[1] = ((pesel / 1000000000) % 10) * 3;
		cyfra[0] = ((pesel / 10000000000) % 10) * 1; // dodane zera

		for (int j = 0; j<11; j++) // i zamienione na j
		{
			suma += cyfra[j];
		}

		/* Tu uprościłem: */
		if (suma % 10 == 0)
			cout << 'D' << endl;
		else
			cout << 'N' << endl;
		suma = 0; // Zerowanie sumy przy każdej iteracji pętli
	}
}

PS. Mógłbyś korzystać z tablicy żeby zrobić to zadanie trochę krócej i lepiej.

Podobne pytania

0 głosów
0 odpowiedzi 403 wizyt
pytanie zadane 3 października 2019 w SPOJ przez Bartek K. Nowicjusz (230 p.)
0 głosów
1 odpowiedź 672 wizyt
pytanie zadane 25 lipca 2018 w SPOJ przez Deriquest Użytkownik (550 p.)
0 głosów
1 odpowiedź 426 wizyt
pytanie zadane 22 stycznia 2018 w SPOJ przez Maciej3206 Użytkownik (570 p.)

92,568 zapytań

141,424 odpowiedzi

319,634 komentarzy

61,956 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...