Programare în C++ : Câte cifre distincte are un număr de 3 cifre? Varianta fără „if”

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?

4 comentarii

  1. 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.

  2. Cerinta problemei zice ca n-ai voie sa folosesti conditii. Adica, fara if, fara while, fara do while, fara for, s.a.m.d.

Lasă un comentariu

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

Acest site folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.