Welcome, Guest. Please login or register.

Autor Subiect: cel mai mic si cel mai mare nr cu suma cifrelor egala cu un nr n  (Citit de 7467 ori)

0 Membri şi 1 Vizitator vizualizează acest subiect.

Ayumi

  • Vizitator
cel mai mic si cel mai mare nr cu suma cifrelor egala cu un nr n
« : Ianuarie 15, 2012, 11:43:53 a.m. »
Buna ziua !
Am gasit urmatoarea problema:
Pe 10 cartonase se afla toate cifrele.Fratele lui Gigel trebuie sa formeze cel mai mare si cel mai mic numar natural care are suma cifrelor egala cu un numar spus de Gigel.De exemplu,daca Gigel spune n = 28(0 <= n <= 45) atunci fratele sau alege cartonasele 4,7,8,9 si formeaza cel mai mic nr = 4789 si cartonasele 0,1,2,3,4,5,6,7 formand 76543210.
Cum as putea sa o rezolv? Ar fi metoda vectorului caracteristic buna in acest caz? Nu am prea folosit-o,dar poate ca se aplica aici,nu?


Offline Quantum

  • Junior
  • **
  • Mesaje postate: 164
  • Popularitate: +6/-3
Răspuns: cel mai mic si cel mai mare nr cu suma cifrelor egala cu un nr n
« Răspuns #1 : Ianuarie 25, 2012, 02:13:31 a.m. »
O solutie:
#include <iostream>
using namespace std;

int main()
{
    int x,a[10],j=0;
   
    do
    {
    cout << "Introduceti un numar intre 0 si 45: ";
    cin >> x;
    }
    while ((x<0)||(x>45));
   
    int total=x;
    cout<<"Cel mai mic numar: ";
    if(x<=9)
    {
        cout<<x;
    }
    else
    {
        for (int i=9;i>=0;i--)
        {
              if ((total-i)>=0)
              {       
                total-=i;   
                a[j]=i;
                j++;
              }       
         }
         for (j=j-2;j>=0;j--)
         {
                cout<<a[j];
         }
     }

    cout<<endl;
    j=0;
    total=0;
    cout<<"Cel mai mare numar: ";
    int i=0;
    for (;i<=9;i++)
    {
        if((x-(total+i))<0)
        {
                break;
        }
       
                total+=i;
                a[j]=i;   
                j++; 
    }
    j--;
    i--;
    a[j]=x-(total-i);
    for ( ;j>=0;j--)
    {
        cout<<a[j];
    }
    return 0;
}