Față de problema inițială, voi aduce o completare în enunț și anume: Se citește un număr de trei cifre nenule. Scrieți un program care să determine și să afișeze numărul de cifre distincte.
Un amic mi-a atras atenția că dacă nu sunt cifrele nenule va trebui să folosesc funcții precum „ceil” și „abs”.
Rezolvarea mea, deci:
- se citește numărul
- se desparte numărul in cifre si fiecare cifră se memorează în câte o variabilă
- se fac rapoarte între toate cifrele și fiecare rezultat se memorează în câte o variabilă
- acolo unde sunt valori identice ale cifrelor, rapoartele vor da 1, altfel vor da 0 și un număr mai mare decât 1
- pentru asta vom elimina numerele distincte de 1 prin efectuarea unei sume de îmnulțiri
- suma se memorează într-o variabilă
- se afișeaza rezultatul diferenței dintre numărul 3 (numărul total de cifre) și variabila de mai sus
Programarea:
#include <iostream.h>
#include <conio.h>
int a,b,c,d,q,w,e,r,t,y,u;
void main()
{
cout<<„Citeste nr”; cin>>a;
b=a%10;
c=a%100/10;
d=a/100;
q=b/c;
w=c/b;
e=c/d;
r=d/c;
t=b/d;
y=d/b;
u=q*w+e*r+t*y;
cout<<„Numarul „<<a<<” are „<<3-u<<„cifre distincte „;
getch();
}
Alte sugestii?
eu ma gandesc la altceva mai simplu. ce ar fi sa faci in felul urmator:
1. creezi un vector de control in care sa tii cifrele pe care le gasesti folosind impartirea cu rest (%).
2. creezi o variabila pentru nr de cifre distincte.
3. scoti fiecare cifra din respectivul numar si daca nu il ai in vectorul de control atunci cifraDistincta++ si il plasezi si in vector
la sfarsit poti afisa si cifrele distincte si nr lor foarte usor. Dar panuiesc ca algoritmul tau e mult mai rapid din punct de vedere al timpului de executie.
Cerinta problemei zice ca n-ai voie sa folosesti conditii. Adica, fara if, fara while, fara do while, fara for, s.a.m.d.
:)) sorry … am vazut doar acum …