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

question-closed SPOJ - Nieprawidłowe iloczyny w JPESEL

VPS Starter Arubacloud
0 głosów
167 wizyt
pytanie zadane 17 sierpnia 2017 w C i C++ przez sohu Nowicjusz (200 p.)
zamknięte 17 sierpnia 2017 przez sohu
Witam. Mam niemały problem dotyczący zadania JPESEL ze SPOJa - link: http://pl.spoj.com/problems/JPESEL/

Po ciężkiej batalii z kodem i samym sobą dotarłem do takiej postaci kodu: http://ideone.com/xNAL25

Dodałem linijkę, która ma za zadanie wypisywać wszystkie iloczyny. Problem w tym, że wypisywane wyniki są dalekie od prawidłowych. Pytanie - dlaczego? Ślęczę nad tym od dłuższego czasu szukając odpowiedzi, ale nie potrafię nic wymyślić. Serdecznie proszę o zerknięcie i jakąś ewentualną podpowiedź.

 

Edit: dodam jeszcze, że w kodzie mam kilka linijek, które nie są do niczego potrzebne. To są pozostałości po poprzednich próbach, wybaczcie, że nie pozbyłem się ich przed wrzuceniem na ideone.
komentarz zamknięcia: Problem rozwiązany.

1 odpowiedź

+1 głos
odpowiedź 17 sierpnia 2017 przez Kodeman Gaduła (4,480 p.)
wybrane 17 sierpnia 2017 przez sohu
 
Najlepsza

Problemem jest to, że mnożysz numer[j-1]. Numer jest zmienną typu string, a numer[j-1] to tak naprawdę pojedynczy char. Więc gdy wykonujesz na nim działania, to zamienia znak na liczbę. Problem jest w tym, że znak '0' odpowiada liczbie ascii bodajże 48. W takim wypadku możesz po prostu odejmować 48 od każdego wystąpienia numer[j-1]. U Ciebie wystarczy zamienić działanie na: 

temp = (numer[j - 1] - 48) * tab[j - 1];
2
komentarz 17 sierpnia 2017 przez niezalogowany
Jeszcze trzeba dodać nową linię przy wypisywaniu i zerować zmienną suma za każdym razem gdy wykonywana jest funkcja ;)
komentarz 17 sierpnia 2017 przez sohu Nowicjusz (200 p.)
Dziękuję serdecznie, skrypt jak najbardziej działa, jednak sędzia pokazuje wypluwa błędną odpowiedź. Może ten void mu się nie podoba?
1
komentarz 17 sierpnia 2017 przez niezalogowany

Mi spoj zaliczył taki kod:

#include "iostream"
#include "math.h"
#include "string"
using namespace std;
int ile, i, tab[11] = { 1,3,7,9,1,3,7,9,1,3,1 };
string numer;

void pesel() {
	int suma = 0;
	int j;
	int temp = 1;
	cin >> numer;
	for (j = 1; j <= 11; j++) {
		temp = (numer[j - 1] - 48) * tab[j - 1];
		//cout << temp << endl; // dodałem to, aby sprawdzić, jakie wyniki mnożenia wychodzą
		suma += temp;
	}
	if (suma % 10 == 0) {
		cout << "D";
	}
	else {
		cout << "N";
	}

	cout << endl;
	//cout << suma << endl;
}

int main()
{
	cin >> ile;
	for (i = 1; i <= ile; i++) {
		pesel();
	}
	return 0;
}
komentarz 17 sierpnia 2017 przez sohu Nowicjusz (200 p.)
Porównałem to co poprawiłem z tym kodem i było identycznie oprócz klamry obok int main. Mojego mi nie zaliczyło, a ten już tak. Nie wiem czemu tak się stało, ale ważne, że działa.

Dziękuję wszystkim za pomoc :)

Podobne pytania

0 głosów
1 odpowiedź 259 wizyt
pytanie zadane 16 października 2016 w C i C++ przez Zangariev Początkujący (290 p.)
0 głosów
1 odpowiedź 649 wizyt
pytanie zadane 25 lipca 2018 w SPOJ przez Deriquest Użytkownik (550 p.)
0 głosów
1 odpowiedź 291 wizyt
pytanie zadane 1 sierpnia 2022 w Java przez Ada3141592654 Początkujący (270 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...