Niech n będzie nieujemną liczbą całkowitą, której najbardziej znacząca cyfra w zapisie dziesiętnym jest większa od 0 i mniejsza od 9. Cyfrowym dopełnieniem liczby n nazywamy liczbę całkowitą d, której zapis dziesiętny otrzymujemy z zapisu dziesiętnego liczby n przez zamianę każdej cyfry tego zapisu na cyfrę, która jest jej uzupełnieniem do 9.
Przykład:
Cyfrowym dopełnieniem liczby 2021 jest liczba 7978.
Zadanie 1.1. (0–2)
Podaj czterocyfrową liczbę n taką, że wartość bezwzględna różnicy liczby n i jej cyfrowego dopełnienia d jest:
a) najmniejsza n = ______________________
b) największa n = ______________________
Zadanie 1.2. (0–4)
W postaci pseudokodu lub w wybranym języku programowania napisz algorytm, który dla dodatniej liczby całkowitej n obliczy jej cyfrowe dopełnienie d. O liczbie n wiadomo, że jej najbardziej znacząca cyfra jest większa od 0 i mniejsza od 9.
Uwaga: Twój algorytm może używać wyłącznie zmiennych przechowujących liczby całkowite oraz może operować wyłącznie na liczbach całkowitych. W zapisie algorytmu możesz korzystać tylko z instrukcji sterujących, operatorów arytmetycznych: dodawania, odejmowania, mnożenia, dzielenia, dzielenia całkowitego i reszty z dzielenia; operatorów logicznych, porównań i instrukcji przypisywania lub samodzielnie napisanych funkcji i procedur wykorzystujących powyższe operacje. Zabronione jest używanie funkcji wbudowanych dostępnych w językach programowania. Nie wolno w szczególności korzystać z żadnych funkcji zamiany z typu znakowego lub napisowego na liczbowy i odwrotnie.
Specyfikacja:
Dane:
n – dodatnia liczba całkowita taka, że jej najbardziej znacząca cyfra jest większa od 0
i mniejsza od 9
Wynik:
d – dodatnia liczba całkowita, cyfrowe dopełnienie liczby n
W pseudokodzie
W C++
Zasady oceniania 1.1
2 pkt – za poprawną odpowiedź.
1 pkt – za poprawną odpowiedź tylko a) ALBO tylko b).
0 pkt – za podanie odpowiedzi niepoprawnej albo brak odpowiedzi.
Rozwiązanie 1.1
a) 5000 (lub 4999)
b) 8999 (lub 1000)
Poziom wykonania zadania 56%
Zasady oceniania 1.2
4 pkt – za poprawny algorytm, w tym:
W przypadku rozwiązania w wersji I (pobieranie i modyfikacja kolejnych cyfr liczby):
1 pkt – za poprawne odwoływanie się (w pętli) do cyfry najmniej znaczącej albo
najbardziej znaczącej oraz jej modyfikację (obliczenie jej dopełnienia);
1 pkt – za poprawną konstrukcję pętli;
1 pkt – za poprawne instrukcje wyliczające kolejne potęgi 10;
1 pkt – za otrzymanie poprawnej wartości d.
W przypadku rozwiązania w wersji II (utworzenie liczby złożonej z dziewiątek o liczbie
cyfr takiej samej jak liczba cyfr liczby n):
1 pkt – za poprawne zliczenie liczby cyfr liczby n;
1 pkt – za poprawną konstrukcję pętli;
1 pkt – za poprawne tworzenie (w pętli) liczby złożonej z dziewiątek;
1 pkt – za otrzymanie poprawnej wartości d (odjęcie n od liczby złożonej z dziewiątek).
0 pkt – za odpowiedź błędną lub brak odpowiedzi.
Uwaga: za każde inne niż przedstawione niżej, ale całkowicie poprawne rozwiązanie
spełniające warunki zadania przyznajemy maksymalną liczbę punktów.
Przykładowe rozwiązania 1.2
I wersja
potega ← 1d ← 0
dopóki n > 0 wykonuj
cyfra ← n mod 10
n ← n div 10
cyfra ← 9 - cyfra
d ← d + (potega * cyfra)
potega ← potega * 10
II wersja (poprawiony błąd powinno być div zamiast / )
suma ← 0kopia ← n
dopóki kopia > 0 wykonuj
kopia ← kopia div 10
suma ← suma * 10 + 9
d ← suma - n
Przykład 1.
d ← 0
x ← 10
dopóki n > 0 wykonuj
d ← 9 * x / 10 - n mod x + d
n ← n - n mod x
x ← x * 10
wypisz d
Przykład 2.
odjemna ← 9
maga ← 1
dopóki odjemna < n wykonuj
maga ← maga * 10
odjemna ← odjemna + 9 * maga
d ← odjemna - n
Poziom wykonania zadania 29%
Przykład 2. w C/C++, Java
int odjemna = 9;
int maga = 1;
while (odjemna < n) {
maga = maga * 10;
odjemna = odjemna + 9 * maga;
}
int d = odjemna - n;
Przykład 2. w Python
odjemna = 9
maga = 1
while odjemna < n:
maga = maga * 10
odjemna = odjemna + 9 * maga
d = odjemna - n
Przykład 2. w Pascal
maga := 1;
while odjemna < n do
begin
maga := maga * 10;
odjemna := odjemna + 9 * maga;
end;
d := odjemna - n;
Na podstawie: