Szukaj na tym blogu

środa, 22 maja 2024

Zadanie 2. Cyfry (0–3)

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:

  1. Zmienna b jest na początku ustawiona na 1 i służy jako waga (potęga 10) do dodawania wyników do zmiennej c. Zmienna b jest mnożona przez 10 w każdej iteracji pętli, aby odpowiadać kolejnym cyfrom liczby od prawej do lewej.

  2. Zmienna c jest ustawiona na 0 i przechowuje wynik końcowy.

  3. Główna pętla działa, dopóki liczba n jest większa niż 0. W każdej iteracji pobierana jest ostatnia cyfra liczby n (przez operację n mod 10) i następuje jej analiza:

    • Jeśli cyfra jest parzysta (a mod 2 = 0), do c dodawana jest połowa tej cyfry (czyli a div 2) pomnożona przez aktualną wartość b.
    • Jeśli cyfra jest nieparzysta, dodawana jest do c aktualna wartość b.
  4. 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