Szukaj na tym blogu

środa, 22 maja 2024

Zadanie 2. Cyfry (0–3)

Arkusz egzaminacyjny MINP-R0-100-2405:

Zasady oceniania rozwiązań zadań

Sprawozdanie: 


Rozwiązanie:

W C ++:

#include <iostream>

using namespace std;

int main() {
    long long n; // zmienna wejściowa
    cout << "Podaj liczbę: ";
    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
    }

    cout << "Wynik: " << c << endl;
    cout << "Działanie c = c + b wykonano: " << licznik_operacji_c_b << " razy." << endl;

    return 0;
}


Python:

n = 33658

num = 0
b = 1
c = 0
while n > 0:
    a = n % 10
    n = n // 10
    if a % 2 == 0:
        c = c + b * a // 2
    else:
        c = c + b
        num += 1
    b = b * 10
print(num)
print(c)

Javascript:

let n = 33658;

let num = 0;
let b = 1;
let c = 0;

while (n > 0) {
    let a = n % 10;
    n = Math.floor(n / 10);
    
    if (a % 2 === 0) {
        c = c + Math.floor(b * a / 2);
    } else {
        c = c + b;
        num += 1;
    }
    
    b = b * 10;
}

console.log(num);
console.log(c);

Java:

public class Main {
    public static void main(String[] args) {
        int n = 33658;
        int num = 0;
        int b = 1;
        int c = 0;

        while (n > 0) {
            int a = n % 10; 
            n = n / 10;      

            if (a % 2 == 0) {
                c = c + b * a / 2; 
            } else {
                c = c + b;  
                num++;      
            }

            b = b * 10;  
        }

        System.out.println("Liczba cyfr nieparzystych: " + num);
        System.out.println("Nowa wartosc c: " + c);
    }
}



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

3. Liczba

Poprawne rozwiązywanie algorytmu krok po kroku

Liczba wejściowa: n=87654321012345678n = 87654321012345678.

Inicjalizacja:

  • b=1b = 1
  • c=0c = 0

Przetwarzanie cyfr:

  1. Cyfra a=8a = 8 (parzysta):

    • c=c+b×(a÷2)=0+1×(8÷2)=0+1×4=4c = c + b \times (a \div 2) = 0 + 1 \times (8 \div 2) = 0 + 1 \times 4 = 4
    • b=b×10=10b = b \times 10 = 10
  2. Cyfra a=7a = 7 (nieparzysta):

    • c=c+b=4+10=14c = c + b = 4 + 10 = 14 (instrukcja c = c + b)
    • b=b×10=100b = b \times 10 = 100
  3. Cyfra a=6a = 6 (parzysta):

    • c=c+b×(a÷2)=14+100×(6÷2)=14+100×3=314c = c + b \times (a \div 2) = 14 + 100 \times (6 \div 2) = 14 + 100 \times 3 = 314
    • b=b×10=1000b = b \times 10 = 1000
  4. Cyfra a=5a = 5 (nieparzysta):

    • c=c+b=314+1000=1314c = c + b = 314 + 1000 = 1314 (instrukcja c = c + b)
    • b=b×10=10000b = b \times 10 = 10000
  5. Cyfra a=4a = 4 (parzysta):

    • c=c+b×(a÷2)=1314+10000×(4÷2)=1314+10000×2=21314c = c + b \times (a \div 2) = 1314 + 10000 \times (4 \div 2) = 1314 + 10000 \times 2 = 21314
    • b=b×10=100000b = b \times 10 = 100000
  6. Cyfra a=3a = 3 (nieparzysta):

    • c=c+b=21314+100000=121314c = c + b = 21314 + 100000 = 121314 (instrukcja c = c + b)
    • b=b×10=1000000b = b \times 10 = 1000000
  7. Cyfra a=2a = 2 (parzysta):

    • c=c+b×(a÷2)=121314+1000000×(2÷2)=121314+1000000=1121314c = c + b \times (a \div 2) = 121314 + 1000000 \times (2 \div 2) = 121314 + 1000000 = 1121314
    • b=b×10=10000000b = b \times 10 = 10000000
  8. Cyfra a=1a = 1 (nieparzysta):

    • c=c+b=1121314+10000000=11121314c = c + b = 1121314 + 10000000 = 11121314 (instrukcja c = c + b)
    • b=b×10=100000000b = b \times 10 = 100000000
  9. Cyfra a=0a = 0 (parzysta):

    • c=c+b×(0÷2)=11121314+100000000×0=11121314c = c + b \times (0 \div 2) = 11121314 + 100000000 \times 0 = 11121314
    • b=b×10=1000000000b = b \times 10 = 1000000000
  10. Cyfra a=1a = 1 (nieparzysta):

    • c=c+b=11121314+1000000000=1011121314c = c + b = 11121314 + 1000000000 = 1011121314 (instrukcja c = c + b)
    • b=b×10=10000000000b = b \times 10 = 10000000000
  11. Cyfra a=2a = 2 (parzysta):

    • c=c+b×(a÷2)=1011121314+10000000000×(2÷2)=1011121314+10000000000=11011121314c = c + b \times (a \div 2) = 1011121314 + 10000000000 \times (2 \div 2) = 1011121314 + 10000000000 = 11011121314
    • b=b×10=100000000000b = b \times 10 = 100000000000
  12. Cyfra a=3a = 3 (nieparzysta):

    • c=c+b=11011121314+100000000000=111011121314c = c + b = 11011121314 + 100000000000 = 111011121314 (instrukcja c = c + b)
    • b=b×10=1000000000000b = b \times 10 = 1000000000000
  13. Cyfra a=4a = 4 (parzysta):

    • c=c+b×(a÷2)=111011121314+1000000000000×(4÷2)=111011121314+1000000000000×2=311011121314c = c + b \times (a \div 2) = 111011121314 + 1000000000000 \times (4 \div 2) = 111011121314 + 1000000000000 \times 2 = 311011121314
    • b=b×10=10000000000000b = b \times 10 = 10000000000000
  14. Cyfra a=5a = 5 (nieparzysta):

    • c=c+b=311011121314+10000000000000=1311011121314c = c + b = 311011121314 + 10000000000000 = 1311011121314 
    • (instrukcja c = c + b)
    • b=b×10=100000000000000b = b \times 10 = 100000000000000
  15. Cyfra a=6a = 6 (parzysta):

    • c=c+b×(a÷2)=1311011121314+100000000000000×(6÷2)=1311011121314+100000000000000×3=31311011121314c = c + b \times (a \div 2) = 1311011121314 + 100000000000000 \times (6 \div 2) = 1311011121314 + 100000000000000 \times 3 = 31311011121314
    • b=b×10=1000000000000000b = b \times 10 = 1000000000000000
  16. Cyfra a=7a = 7 (nieparzysta):

    • c=c+b=31311011121314+1000000000000000=1031311011121314c = c + b = 31311011121314 + 1000000000000000 = 1031311011121314 (instrukcja c = c + b)
    • b=b×10=10000000000000000b = b \times 10 = 10000000000000000
  17. Cyfra a=8a = 8 (parzysta):

    • c=c+b×(a÷2)=1031311011121314+10000000000000000×(8÷2)=1031311011121314+10000000000000000×4=41312111011121314c = c + b \times (a \div 2) = 1031311011121314 + 10000000000000000 \times (8 \div 2) = 1031311011121314 + 10000000000000000 \times 4 = 41312111011121314

Ostateczny wynik:

  • c=41312111011121314c = 41312111011121314

Liczba wykonanych instrukcji c = c + b:

  • Instrukcja ta jest wykonywana dla nieparzystych cyfr.
  • W liczbie n=87654321012345678n = 87654321012345678 cyfry nieparzyste to: 7,5,3,1,1,3,5,77, 5, 3, 1, 1, 3, 5, 7, co oznacza, że instrukcja c = c + b jest wykonana 8 razy.