[Algorytmy] ProjectEuler 17 - inny wynik

MichalProg
Użytkownik
Użytkownik
Posty: 411
Rejestracja: 28 cze 2011, o 21:11
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 62 razy
Pomógł: 1 raz

[Algorytmy] ProjectEuler 17 - inny wynik

Post autor: MichalProg »

Dzień dobry.

Napisałem program, do rozwiązywania tegoż problemu.

Kod: Zaznacz cały

https://projecteuler.net/problem=17
Jednak wynik jest inny (po przeszukaniu w sieci, okazało się, że mój wynik różni się o \(\displaystyle{ 13}\), od prawidłowego). Jednak nie wiem czemu. Załączam kod:

Kod: Zaznacz cały

#include <iostream>

int cyfry[10] = {0, 3, 3, 5, 4, 4, 3, 5, 5, 4};
int do20[10] = {3, 6, 6, 8, 8, 7, 7, 9, 8, 8};
int liczby_20_30_etc[8] = {6, 6, 5, 5, 5, 7, 6, 6};
int sto = 7;
int tysiac = 8;
int AND = 3;

int zwrocIloscLiterWLiczbie(int n)
{
	if (n < 1)
		return -1;
	
	if (n < 10)
		return cyfry[n];
	
	if (n < 20)
		return do20[n - 10];
	
	if (n < 100)
		return liczby_20_30_etc[n / 10 - 2] + cyfry[n % 10];
	
	if (n < 1000)
	{
		if (n == 100)
			return sto;
		
		else
			return cyfry[n / 100] + sto + AND + zwrocIloscLiterWLiczbie(n - n / 100 * 100);
	}
	
	return cyfry[1] + tysiac;
}

int main()
{
	using namespace std;
	
	int sumaLiter = 0;
	
	for (int i = 1; i <= 1000; i++)
		sumaLiter += zwrocIloscLiterWLiczbie(i);
	
	cout << sumaLiter << endl;
	
	return 0;
}
Testowałem na różnych wartościach, z zakresu \(\displaystyle{ <1, 1000>}\), jednak wyniki były dobre. Nie wiem skąd mój wynik jest zły. Proszę o podpowiedź.

Dzięki
Michał
Ukryta treść:    
Ostatnio zmieniony 10 sie 2017, o 13:28 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
Awatar użytkownika
Takahashi
Użytkownik
Użytkownik
Posty: 186
Rejestracja: 12 maja 2017, o 19:04
Płeć: Mężczyzna
Lokalizacja: brak
Podziękował: 1 raz
Pomógł: 22 razy

[Algorytmy] ProjectEuler 17 - inny wynik

Post autor: Takahashi »

Źle liczysz pełne setki:
Ukryta treść:    
MichalProg
Użytkownik
Użytkownik
Posty: 411
Rejestracja: 28 cze 2011, o 21:11
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 62 razy
Pomógł: 1 raz

[Algorytmy] ProjectEuler 17 - inny wynik

Post autor: MichalProg »

Dzięki.

Poprawiona funkcja:

Kod: Zaznacz cały

int zwrocIloscLiterWLiczbie(int n)
{
	if (n < 1)
		return -1;
	
	if (n < 10)
		return cyfry[n];
	
	if (n < 20)
		return do20[n - 10];
	
	if (n < 100)
		return liczby_20_30_etc[n / 10 - 2] + cyfry[n % 10];
	
	if (n < 1000)
	{
		if (n % 100 == 0)
			return cyfry[n / 100] + sto;
		
		else
			return cyfry[n / 100] + sto + AND + zwrocIloscLiterWLiczbie(n - n / 100 * 100);
	}
	
	return cyfry[1] + tysiac;
}
ODPOWIEDZ