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():

  1. int wspak(int a) {
  2.   int awspak = 0;
  3.   while (a > 0) {
  4.     awspak *= 10;
  5.     awspak += a % 10;
  6.     a /= 10;
  7.   }
  8.   return awspak;
  9. }

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.

  1. int dodajSpecjalnie(int a, int b) {
  2.   if (a > b) {
  3.     a = wspak(a);
  4.   }
  5.   if (a < b) {
  6.     b = wspak(b);
  7.   }
  8.   return a + b;
  9. }

Testowanie funkcji

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

  1. int main() {
  2.   int a, b;
  3.   cout << "Podaj liczby\n a = ";
  4.   cin >> a;
  5.   cout << " b = ";
  6.   cin >> b;
  7.   cout << "wynik = " << dodajSpecjalnie(a, b);
  8.   system("pause");
  9.   return 0;
  10. }