Jeszcze jedna diabelnie fajna matematyczna zagadka

1
  1. Pomyśl jakąś liczbę całkowitą z zakresu 1-9.
  2. Pomnóż ją przez 3.
  3. Odejmij 1 lub 2 (Twój wybór).
  4. Pomnóż przez 37.
  5. Jeżeli jest dwucyfrowa, poprzedź zerem (np. 74 -> 074)
  6. Zapisz / zapamiętaj tę trzycyfrową liczbę.
  7. Wykonaj rotację tej liczby w lewo lub w prawo o jedno miejsce, w systemie dziesiętnym. Np. 074 -> 740 lub 074 -> 407.
  8. Oblicz różnicę bezwzględną z liczby po rotacji (p. 7.) i przed rotacją (p. 6.). Tzn. od większej odejmij mniejszą.
  9. Wyszło mniej niż 500? Pomnóż przez 2.

Ile wyszło? Dlaczego? ;)

0

Proste - kluczowe są mnożenie przez 37 i rotacja.

Bierzesz liczbę i mnożysz przez 3 - w najgorszym wypadku masz 3 zatem dajesz użytkownikowi możliwość odjęcia 1 lub 2 (niech myśli, że jest sprytny), a tak naprawdę chodzi o to, żeby nie wyszła 3, bo zabawa się skończy (111 nie podlega rotacji). Mnożysz przez 37 (liczby mnożone przez 37 mają tę właściwość, że po rotacji ich różnica wynosi zawsze 333). Pomnóż przez 2 - masz wynik :D

Jak większość sztuczek opiera się to na tym, żeby ktoś myślał, że ma na coś wpływ - a tak naprawdę wszystkie kroki są zaplanowane.

0

Mi wyszło zero, czy to oznacza, że coś spieprzyłem? :D

0

Raczej tak.

package p;

public class Main7 {

    /**
1. Pomyśl jakąś liczbę całkowitą z zakresu 1-9.
2. Pomnóż ją przez 3.
3. Odejmij 1 lub 2 (Twój wybór).
4. Pomnóż przez 37.
5. Jeżeli jest dwucyfrowa, poprzedź zerem (np. 74 -> 074)
6. Zapisz / zapamiętaj tę trzycyfrową liczbę.
7. Wykonaj rotację tej liczby w lewo lub w prawo o jedno miejsce, w systemie dziesiętnym. Np. 074 -> 740 lub 074 -> 407. 
8. Oblicz różnicę bezwzględną z liczby po rotacji (p. 7.) i przed rotacją  (p. 6.). Tzn. od większej odejmij mniejszą.
9. Wyszło mniej niż 500? Pomnóż przez 2.
     */
    public static void main(String[] args) {
        for (int i = 1; i <= 9; i++) {
            int r = i * 3;
            for (int c = 1; c <= 2; c++) {
                int m = (r - c) * 37;
                for (int b = 0; b <= 1; b++) {
                    int rot = b == 0 ? m % 100 * 10 + m / 100 : m / 10 + m % 10 * 100;
                    int diff = Math.max(m, rot) - Math.min(m, rot);
                    System.out.print(diff < 500 ? diff * 2 : diff);
                    System.out.print(" odjęto " + c);
                    System.out.print(" przesunięto w " + (b == 0 ? "lewo" : "prawo"));
                    System.out.println("");
                }
            }
        }
    }
}
0

Najciekawsza część zagadki polega na wyczajeniu czemu mnożenie przez 37 i rotacja daje różnice podzielne przez 333. Bo np. już przy mnożeniu przez 41 takiej ładnej własności nie ma - w każdym razie byłoby znacznie więcej możliwych wyników niż tylko 333 i 666.

0

Ja czegoś nie kumam, weźcie mnie naprostujcie

Krolik napisał(a):
  1. Pomyśl jakąś liczbę całkowitą z zakresu 1-9.

5

Krolik napisał(a):
  1. Pomnóż ją przez 3.

5*3 = 15

Krolik napisał(a):
  1. Odejmij 1 lub 2 (Twój wybór).

15-1 = 14

Krolik napisał(a):
  1. Pomnóż przez 37.

14*37 = 518

Krolik napisał(a):
  1. Jeżeli jest dwucyfrowa, poprzedź zerem (np. 74 -> 074)

Nie jest.

Krolik napisał(a):
  1. Zapisz / zapamiętaj tę trzycyfrową liczbę.

Zapisałem. 518.

Krolik napisał(a):
  1. Wykonaj rotację tej liczby w lewo lub w prawo o jedno miejsce, w systemie dziesiętnym. Np. 074 -> 740 lub 074 -> 407.

815

Krolik napisał(a):
  1. Oblicz różnicę bezwzględną z liczby po rotacji (p. 7.) i przed rotacją (p. 6.). Tzn. od większej odejmij mniejszą.

815 - 518 = 297

Krolik napisał(a):
  1. Wyszło mniej niż 500? Pomnóż przez 2.

297 * 2 = 594

Krolik napisał(a):

Ile wyszło? Dlaczego? ;)

Wyszło 594, co w tym takiego ekscytującego?

A dobra już wiem.
Źle robiłem rotację (facepalm). Sorry

1 użytkowników online, w tym zalogowanych: 0, gości: 1