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;