Arkusz egzaminacyjny MINP-R0-100-2405:
Zasady oceniania rozwiązań zadańhttps://cke.gov.pl/images/_EGZAMIN_MATURALNY_OD_2023/Arkusze_egzaminacyjne/2024/Informatyka/MINP-R0-100-2405-zasady.pdf
Rozwiązanie:
W C ++:
- #include <iostream>
- int main() {
- long long n; // zmienna wejściowa
- std::cout << "Podaj liczbę: ";
- std::cin >> n;
- long long b = 1; // inicjalizacja b
- long long c = 0; // inicjalizacja c
- int licznik_operacji_c_b = 0; // licznik dla c = c + b
- while (n > 0) {
- int a = n % 10; // reszta z dzielenia n przez 10 (ostatnia cyfra)
- n = n / 10; // iloraz z dzielenia n przez 10 (usuniecie ostatniej cyfry)
- if (a % 2 == 0) { // jeżeli cyfra parzysta
- c = c + b * (a / 2); // dzielenie cyfry parzystej przez 2
- } else { // jeżeli cyfra nieparzysta
- c = c + b; // dodawanie 1 do wyniku
- licznik_operacji_c_b++; // zliczanie wykonania c = c + b
- }
- b = b * 10; // zwiększenie wagi dla następnej cyfry
- }
- std::cout << "Wynik: " << c << std::endl;
- std::cout << "Działanie c = c + b wykonano: " << licznik_operacji_c_b << " razy." << std::endl;
- return 0;
- }
Rozwiązanie czat gpt:
Wyjaśnienie algorytmu:
Zmienna
b
jest na początku ustawiona na 1 i służy jako waga (potęga 10) do dodawania wyników do zmiennejc
. Zmiennab
jest mnożona przez 10 w każdej iteracji pętli, aby odpowiadać kolejnym cyfrom liczby od prawej do lewej.Zmienna
c
jest ustawiona na 0 i przechowuje wynik końcowy.Główna pętla działa, dopóki liczba
n
jest większa niż 0. W każdej iteracji pobierana jest ostatnia cyfra liczbyn
(przez operacjęn mod 10
) i następuje jej analiza:- Jeśli cyfra jest parzysta (
a mod 2 = 0
), doc
dodawana jest połowa tej cyfry (czylia div 2
) pomnożona przez aktualną wartośćb
. - Jeśli cyfra jest nieparzysta, dodawana jest do
c
aktualna wartośćb
.
- Jeśli cyfra jest parzysta (
Na koniec w każdej iteracji wartość
n
jest dzielona przez 10 (n div 10
), co oznacza przesunięcie o jedną cyfrę w lewo.
Tabela dla podanych liczb
Uzupełnijmy tabelę krok po kroku dla każdej liczby n
:
1. Liczba 33658
- Iteracja 1:
- a = 8, n = 3365 → parzysta, więc c = c + 1 * (8 div 2) = 0 + 1 * 4 = 4
- b = 10
- Iteracja 2:
- a = 5, n = 336 → nieparzysta, więc c = c + 10 = 4 + 10 = 14
- b = 100
- Iteracja 3:
- a = 6, n = 33 → parzysta, więc c = c + 100 * (6 div 2) = 14 + 100 * 3 = 314
- b = 1000
- Iteracja 4:
- a = 3, n = 3 → nieparzysta, więc c = c + 1000 = 314 + 1000 = 1314
- b = 10000
- Iteracja 5:
- a = 3, n = 0 → nieparzysta, więc c = c + 10000 = 1314 + 10000 = 11314
Wartość c: 11314
Liczba wykonań instrukcji c ← c + b
: 3 (została wykonana 3 razy dla cyfr nieparzystych)
2. Liczba 542102
- Iteracja 1:
- a = 2, n = 54210 → parzysta, więc c = c + 1 * (2 div 2) = 0 + 1 * 1 = 1
- b = 10
- Iteracja 2:
- a = 0, n = 5421 → parzysta, więc c = c + 10 * (0 div 2) = 1 + 0 = 1
- b = 100
- Iteracja 3:
- a = 1, n = 542 → nieparzysta, więc c = c + 100 = 1 + 100 = 101
- b = 1000
- Iteracja 4:
- a = 2, n = 54 → parzysta, więc c = c + 1000 * (2 div 2) = 101 + 1000 = 1101
- b = 10000
- Iteracja 5:
- a = 4, n = 5 → parzysta, więc c = c + 10000 * (4 div 2) = 1101 + 20000 = 21101
- b = 100000
- Iteracja 6:
- a = 5, n = 0 → nieparzysta, więc c = c + 100000 = 21101 + 100000 = 121101
Wartość c: 121101
Liczba wykonań instrukcji c ← c + b
: 2