szukanie zaawansowane
 [ Posty: 3 ] 
Autor Wiadomość
Mężczyzna Offline
PostNapisane: 6 sie 2017, o 16:45 
Użytkownik

Posty: 252
Lokalizacja: Łódź
Dzień dobry.

Napisałem program, do rozwiązywania tegoż problemu. https://projecteuler.net/problem=17 Jednak wynik jest inny (po przeszukaniu w sieci, okazało się, że mój wynik różni się o 13, od prawidłowego). Jednak nie wiem czemu. Załączam kod:

Kod:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#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 <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ść:    
Góra
Mężczyzna Offline
PostNapisane: 6 sie 2017, o 17:14 
Użytkownik
Avatar użytkownika

Posty: 96
Lokalizacja: brak
Źle liczysz pełne setki:

Ukryta treść:    
Góra
Mężczyzna Offline
PostNapisane: 6 sie 2017, o 19:12 
Użytkownik

Posty: 252
Lokalizacja: Łódź
Dzięki.

Poprawiona funkcja:

Kod:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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;
}
Góra
Utwórz nowy temat Odpowiedz w temacie  [ Posty: 3 ] 


 Zobacz podobne tematy
 Tytuł tematu   Autor   Odpowiedzi 
 [Algorytmy] Algorytm dla systemu dziesietnego  Madeleinke  4
 [Algorytmy] Metoda siecznych - zadanie 4  rodzyn7773  1
 [Algorytmy] Wyznaczanie tras  kielarzu  2
 algorytmy - schemat blokowy (zadanko)  Paatyczak  4
 [Algorytmy] złozonośc obliczeniowa i dopasowanie wzorca  lisio  3
 
Atom [Regulamin Forum] [Instrukcja LaTeX-a] [Poradnik] [F.A.Q.] [Reklama] [Kontakt]
Copyright (C) Karpatka.pl