Minimum bez instrukcji warunkowych

Zadanie 9 z 17 · rozdział 16Trudność: 2 z 3bit-trickmin/maxbez if

Treść zadania

Wczytaj dwie liczby całkowite a i b. Wypisz mniejszą z nich bez użycia instrukcji warunkowych (if, wyrażenia x if warunek else y) i bez funkcji min, max, abs, sorted.

Dane wejściowe

  • 1. linia: a
  • 2. linia: b

Dane wyjściowe

Jedna liczba całkowita: mniejsza z liczb a i b (gdy są równe — ich wspólna wartość).

Ograniczenia

  • $-10^9 \le a, b \le 10^9$ — w tym zadaniu liczby mogą być ujemne

Uwagi

  • Dopuszczalne są operacje arytmetyczne i bitowe.
  • Wskazówka: dla d = a - b wyrażenie d >> 63 daje -1 (same jedynki w zapisie binarnym), gdy d < 0, oraz 0, gdy d ≥ 0. Wtedy d & (d >> 63) jest równe d albo 0.
  • Tą samą sztuczką otrzymasz maksimum: a - (d & (d >> 63)).

Przykład

Wejście
3
2
Wyjście
2

Potrzebujesz teorii?

Zasady obowiązujące w rozdziale 16

Zadania w tym rozdziale ćwiczą zamianę liczb między systemami liczbowymi oraz operatory bitowe: & (AND), | (OR), ^ (XOR), ~ (NOT) i przesunięcia <<, >>.
Każde zadanie (oraz każdy podpunkt w zadaniach wieloczęściowych) jest osobnym, niezależnym programem: czyta standardowe wejście (stdin) i wypisuje wynik na standardowe wyjście (stdout).

Konwencje wspólne:

  • Każda liczba na wejściu jest w osobnej linii, w kolejności podanej w sekcji Wejście.
  • Liczby na wejściu są nieujemne (0 jest dozwolone), chyba że zadanie wprost mówi inaczej.
  • Zapis binarny wypisuj jako ciąg znaków 0 i 1 **bez spacji, bez prefiksu 0b i bez zer wiodących**; zapis binarny liczby 0 to 0.
  • Dla systemów o podstawie większej niż 10 używaj cyfr 0–9 oraz wielkich liter A–Z.
  • Jeśli zadanie mówi „nie wypisuj nic” — program nie wypisuje nawet pustej linii.
  • Program nie wypisuje komunikatów typu „Podaj liczbę:”.

Zadanie pochodzi z otwartego zbioru Nauka-Programowania (z rozwiązaniami wzorcowymi). Zgłoś błąd w treści lub testach.

Python uruchomi się w przeglądarce przy pierwszym teście.

Kod zapisuje się automatycznie w tej przeglądarce. Tab wstawia wcięcie; aby opuścić edytor klawiaturą, naciśnij Esc, a potem Tab.

Testy

Program dostaje „Wejście” przez input() i musi wypisać „Oczekiwane wyjście”. Liczby porównywane są z tolerancją 0,01, a tekst podany w input("…") nie jest sprawdzany.

Test 1

Nie uruchomiono
Wejście
9
2
Oczekiwane wyjście
2

Test 2

Nie uruchomiono
Wejście
5
5
Oczekiwane wyjście
5

Test 3

Nie uruchomiono
Wejście
0
7
Oczekiwane wyjście
0

Test 4

Nie uruchomiono
Wejście
-3
2
Oczekiwane wyjście
-3

Test 5

Nie uruchomiono
Wejście
-5
-8
Oczekiwane wyjście
-8

Test 6

Nie uruchomiono
Wejście
1000000000
-1000000000
Oczekiwane wyjście
-1000000000
Uruchom z własnymi danymi