Răspuns :

Răspuns:

Varianta 1:

#include <iostream>

using namespace std;

int n,ap,cif;

int main()

{

   cin>>n;

   while (n)

   {

       cif=n%10;

       if (cif==2)

           ap++;

       n/=10;

   }

   cout<<ap;

   return 0;

}

while (n) este echivalent cu while (n!=0)

while(expresie logică)

Varianta 2:

#include <iostream>

using namespace std;

int n,cif1,cif2,cif3,ap;

int main()

{

   cin>>n;

   cif1=n%10;

   if (cif1==2)

       ap++;

   n/=10;

   cif2=n%10;

   if (cif2==2)

       ap++;

   n/=10;

   cif3=n%10;

   if (cif3==2)

       ap++;

   n/=10;

   if (n==2)

       ap++;

   cout<<ap;

   return 0;

}

Explicație:

Pentru că nu ai concretizat limbajul ce se va folosi am creat un program în C++.

Pentru că nu a fost restricționată folosirea structurilor repetitive, dar a fost concretizat că numărul este exact de 4 cifre am creat 2 variante de răspuns:

Varianta 1 presupune un program care folosește algoritmul de spargere a unui număr în cifre, unde la fiecare cifră se întreabă dacă este egală cu 2 și dacă condiția este adevărată crește o variabilă ce monitorizează numărul de apariții a lui 2. (Acest algoritm lucrează pentru orice număr de cifre)

Algoritmul pentru spargerea numărului în cifre:

while (n)

{

cif=n%10;

prelucrare(cif);

n=n/10;

}

Să luăm de exemplu numărul 2122 (unde cifra 2 apare de trei ori) și să-l parcurgem prin algoritm:

1) while (n!=0) // un lucru adevărat deci se execută următoarele instrucțiuni

a) Variabilei cif i se atribuie ultima cifră prin operația n%10 // cif=2

b) Se verifică dacă (cif==2) ceea ce este adevărat deci se execută și creșterea variabilei ap prin atribuire ap++ sau alt fel scris ap=ap+1 (ap va monitoriza de câte ori apare 2 sau câte cifre de 2 avem în numărul dat) deci ap=1;

c) Se elimină ultima cifră din n prin n=n/10 // n=212

2) while (n!=0) // condiția de la while este adevărată deci se execută următoarele instrucțiuni:

a) cif=n%10 // cif=2;

b) (cif==2) Adev. deci ap=2

c) n=n/10 // n=21

3) while (n!=0) // adevărat:

a) cif=n%10 // cif=1,

b) (cif==2) Fals deci ap rămâne 2 (nu se execută ap++ pentru că condiția de la if este falsă)

c) n=2

4) while (n!=0) // Adev.

a) cif = 2;

b) ap=3;

c) iar n=0;

5) while (n!=0) aici se încheie execuția din while pentru că n nu este != de 0 ci este egal cu 0.

cout<<ap;   // ap=3;

Varianta 2 presupune același algoritm de spargere în cifre doar că generalizat și afișează valoarea corectă strict dacă numărul are exact 4 cifre. Să luăm de exemplu numărul n=1232 (unde cifra 2 apare de două ori) și să-l parcurgem prin algoritm:

1) cif1=n%10 // cif1=2;

2) Se verifică condiția (cif1==2) care este adevărată și se execută instrucțiunea ap++ (ap=ap+1);

3) n=n/10, eliminarea ulimii cifre din număr // n=123;

4) cif2=n%10 // cif2=3;

5) Se verifică condiția (cif2==0) care este falsă deci ap rămâne cu valoarea 1;

6) n=n/10, eliminăm dinnou ultima cifră // n=12;

7) cif3=n%10 // cif3=2;

8) (cif3==2) este adevărat, ap crește // ap=2;

9) n=n/10 // n=1;

10) nu mai este nevoie de o altă variabilă pentru că n are deja valoarea primei cifre din număr care este deasemenea ultima cifră pe care trebuie să o verificăm;

11) (n==2) este fals deci ap rămâne 2 // ap=2.

cout<<ap;