Strona główna » Po Godzinach » Zagadki » Odgadnij Wynik
 

Odgadnij Wynik

Zagadka

Poniższe dodawanie jest troszkę inne od tradycyjnego dodawania. Przeanalizuj podane przykłady, a następnie spróbuj określić regułę dodawania. Podaj ile wynosi ostatni wynik.

  1. 36 + 54 = 81
  2. 12 + 67 = 88
  3. 22 + 22 = 44
  4. 23 + 36 = 86
  5. 26 + 31 = 39
  6. 23 + 45 = ?

Rozwiązanie

Odpowiedź

Poprawna odpowiedź to 23 + 45 = 77, szczegóły obliczeń zostały podane poniżej.

Wyjaśnienie

W treści zadania zostało podane, że liczby zostały dodane, więc musi istnieć pewien dodatkowy etap przed / po dodaniu. Jak można z podanych przykładów zauważyć dla dwóch identycznych liczb wynik jest taki sam jak w przypadku normalnego dodawania tj. 23 [+] 23 = 23 + 23 = 46. Tezę o dodawaniu potwierdza również fakt, że wynik jest zawsze większy od każdej z liczb.

Przypatrzmy się dwóm równaniom 36 [+] 54 = 81 oraz 23 [+] 36 = 86. W obu przypadkach po lewej stronie występuje ta sama liczba, ale dodawany jest inny składnik. Jednak 36 + 54 = 90, a nie 81... Któraś z liczb musiała się zatem zmniejszyć o 9. Wtedy prawdziwe będzie, że 27 + 54 = 81 lub 36 + 45 = 81. W tym drugim przypadku warto zauważyć, że drugi składnik składa się z tych samych cyfr co poprzednio. Metoda ta zadziała również w drugim przypadku 12 [+] 67 = 88, ale tym razem trzeba dodać 9, a nie odjąć. Otóż 21 + 67 = 88 i 12 + 76 = 88. Co możemy zauważyć?

Drugi składnik znowu się różni o 9 i składa się z tych samych cyfr. Jednak teoria różnicy 9 upada np. przy 26 [+] 31 = 39. Jednak jak z 45 otrzymać 54, a z 67 otrzymać 76? Wystarczy zapisać liczby wspak! Sprawdźmy to na przykładzie 26 [+] 31 = 39. Jeśli zamienimy drugi składnik na jego wersję wspak to 26 + 13 = 39. Zgadza się! Warto sprawdzić dla innych przykładów.

Jednak dla 36 [+] 23 = 86 otrzymujemy błędny wynik: 36 + 32 = 68. Czym różni się ten przykład od innych? Otóż większa liczba stoi jako pierwsza, a nie druga. Spróbujmy zapisać wspak większa liczbę. Wtedy faktycznie 63 + 23 = 86.

Reguła

Podsumowując podczas dodawania zapisujemy wspak liczbę, która jest większa. Resztę działania wykonujemy jak w przypadku zwykłego dodawania :)

Implementacja

Liczba wspak

Pisząc program liczbę można zapisać wspak przy pomocy takiej funkcji wspak():

C++C#
Python
  1. def wspak(a):
  2.   awspak = 0;
  3.   while a > 0:
  4.     awspak *= 10
  5.     awspak += a % 10
  6.     a //= 10
  7.   return awspak

Potem w programie wystarczy dopisać funkcję, która zgodnie z regułami zapisze wspak odpowiedni składnik i na koniec zwróci sumę dwóch liczb.

C++C#
Python
  1. def dodajSpecjalnie(a, b):
  2.   if (a > b):
  3.     a = wspak(a)
  4.   if (a < b):
  5.     b = wspak(b)
  6.   return a + b

Testowanie funkcji

Wystarczy uruchomić poniższy kod, aby sprawdzić czy potrafi już dodawać według odnalezionej wcześniej regule!

C++C#
Python
  1. a = int(input("Podaj liczby\n a = "))
  2. b = int(input(" b = "))
  3. print("wynik =", dodajSpecjalnie(a, b))