Rezolvare completă PbInfo #2321 HappyNY2018

Albă ca Zăpada

şi cei n pitici locuiau încă în căsuţa lor din pădure. Piticilor le făcuse cadou Moş Crăciun câte un număr şi fiecare pitic s-a hotărât să scrie numărul primit ca sumă de m numere naturale.

Cerința

Dându-se cele n numere naturale primite de pitici, să se afle, pentru fiecare pitic, cele m numere a căror sumă este egală cu numărul primit de pitic, astfel încât cel mai mic dintre numerele din sumă să fie maxim posibil, iar diferenţa dintre cel mai mare număr din sumă şi cel mai mic să fie minimă.

Date de intrare

Programul citește de la tastatură numerele n şi m, iar apoi de pe a doua linie n numere naturale, separate prin spații, reprezentând numerele primite de pitici.

Date de ieșire

Programul va afișa pe ecran, pe primele n linii, câte m numere, reprezentând numerele cerute pentru fiecare pitic, în ordine crescătoare.

Restricții și precizări

  • 1 ≤ n ≤ 2017
  • 2 ≤ m ≤ 2018
  • cele n numere citite vor fi mai mici decât 1.000.000

Exemplu

Intrare

1 2
5

Ieșire

2 3

Explicație

Avem un pitic care a primit numărul 5 şi trebuie să-l scrie ca sumă de două numere naturale : 2+3=5. Cel mai mic dintre cele două numere este maxim (2).

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema HappyNY2018:

#include <iostream>

using namespace std;

int n,m,i,j,x,r,c,d,e,k,j1,v[100],d1,r1,c1,q,z,u ;
char sir[128];

int main()
{
    cin >> n >> m ;
    for ( i=1 ; i<=n ; i++ )
    {
        cin >> x ;
        r = x % m ;
        c = x / m ;
        d = m - r ;
        e = c + 1 ;
        k=0;
        c1 = c ;
        if(c1==0){k=1;v[1]=0;}
        else
        while( c1!=0 )
        {
            k++ ;
            v[k] = c1 % 10 ;
            c1 = c1 / 10 ;
        };
        q=127/(k+1);
        z=127%(k+1);
        u=-1 ;
        for(j=1 ; j<=q ; j++)
        {
           for(j1=k ; j1>=1 ; j1--)
           {
               u++ ;
               sir[u]='0'+v[j1];
           }
           u++ ;
           sir[u]=' ' ;
        }
        for(j=1;j<=z;j++)
        {
            u++ ;
            sir[u]=' ' ;
        }
        d1 = d / q ;
        r1 = d % q ;
        for ( j=1 ; j<=d1 ; j++ ) cout << sir ;
        for ( j=1 ; j<=r1 ; j++ ) cout << c << " " ;
        k=0;
        c1 = e ;
        if(c1==0){k=1;v[1]=0;}
        else
        while( c1!=0 )
        {
            k++ ;
            v[k] = c1 % 10 ;
            c1 = c1 / 10 ;
        };
        q=127/(k+1);
        z=127%(k+1);
        u=-1 ;
        for(j=1 ; j<=q ; j++)
        {
           for(j1=k ; j1>=1 ; j1--)
           {
               u++ ;
               sir[u]='0'+v[j1];
           }
           u++ ;
           sir[u]=' ' ;
        }
        for(j=1;j<=z;j++)
        {
            u++ ;
            sir[u]=' ' ;
        }
        d1 = r / q ;
        r1 = r % q ;
        for ( j=1 ; j<=d1 ; j++ ) cout << sir ;
        for ( j=1 ; j<=r1 ; j++ ) cout << e << " " ;
        cout << "\n" ;
    }
    return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #2321 HappyNY2018

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2321 HappyNY2018 de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!