👤

S-a notat cu x%y restul împărțirii numărului întreg x la nr. întreg nenul y si cu [a] partea întreaga a numărului real a.

citește n
z<-0
p<-1
cat timp n>0 executa
c<-n%10
n<-[n/10]
dacă c%3=0 atunci
z<-z+p* (9-c)
p<-p*10

scrie z

a)Scrieți valoarea care se va afișa dacă se citește n=103456

b)Scrieți toate numerele naturale impare, distincte fiecare avand exact 2 cifre,care pot fi citite pentru variabila a astfel incat sa se afișeze valoarea 3.

c)Scrieți in pseudocod un algoritm echivalent cu cel dat in care sa se înlocuiască structura "cat timp...executa" cu o structura repetitivă de alt tip.

d)Scrieți programul C/C++ corespunzător algoritmului dat.


Răspuns :

Programul detecteaza cifrele din numar care sunt divizibile cu 3, si apoi le transforma in termenul necesar pentru a ajunge la valoarea de 9 si formeaza un numar din ele.Cifrele care sunt divizibile cu 9 sunt: 0,3,6,9. Deci daca exista aceste cifre in numar, programul le gaseste. Pentru a forma noul numar, transforma cifra in felul urmator0->9 3->6 6->3 9->0. Deci pentru numarul 103456 avem cifrele 0 3 si 6, transformate sunt: 9,6,3 deci rezultatul este 963
b) Ca sa afiseze doar valoarea 3, trebuie sa contina un numar de 2 cifre cu o singura cifra de 6 si fara nici un alt numar care este divizibil cu 3. Stiind ca numerele trebuie sa fie impare, este clar ca cifra de 6 nu poate fi pe ultima pozitie, deci poate fi doar pe prima pozitie.Avem atunci: 61,65,67
c) Putem folosi o structura repetitiva cu testare finala:
executa
(copiaza tot ce este in cealata structura repetitiva)
pana cand n=0;
d)
#include <iostream>
using namespace std;
int main(){
int n,c,p,z;
cin>>n;
z=0;
p=1;
while(n>0){
c=n%10;
n=n/10;
if(c%3==0){
z=z+(9-c)*p;
p=p*10;
}
}
cout<<z;
}