Forumul Scientia

IT şi electronică => Programare => Subiect creat de: Ayumi din Ianuarie 15, 2012, 11:43:53 AM

Titlu: cel mai mic si cel mai mare nr cu suma cifrelor egala cu un nr n
Scris de: Ayumi din Ianuarie 15, 2012, 11:43:53 AM
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?

Titlu: Răspuns: cel mai mic si cel mai mare nr cu suma cifrelor egala cu un nr n
Scris de: Quantum din Ianuarie 25, 2012, 02:13:31 AM
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;
}