Rezolvare completă PbInfo #623 Numere3

Având o pasiune pentru numere, Răzvan a inventat un nou joc pentru două persoane. Regulile jocului sunt simple: se aleg trei numere naturale a, b şi c astfel încât a<b<c. La fiecare pas, primul jucător adună la a suma cifrelor lui a, iar cel de-al doilea jucător scade din c suma cifrelor lui c, la pasul următor fiind luate în considerare noile valori obţinute pentru a şi c. Jocul se termină când, la un anumit pas, a devine mai mare sau egal decât b, caz în care primul jucător este declarat câştigător, sau când c devine mai mic sau egal cu b, situaţie în care câştigă al doilea jucător. Dacă la un pas se îndeplinesc ambele codiţii, jocul se termină la egalitate.

Cerința

Cunoscând a, b şi c se cere:

a) Suma cifrelor celor trei numere.
b) Valorile numerelor a şi c la fiecare pas al jocului, precum şi câştigătorul jocului.

Date de intrare

Fişierul de intrare numere3.in conţine pe prima linie un număr natural p. Pentru toate testele de intrare, numărul p poate avea doar valoarea 1 sau valoarea 2.

Pe a doua linie se găsesc cele trei numere naturale a, b şi c descrise în enunţ.

Date de ieșire

Dacă valoarea lui p este 1, se va rezolva numai punctul a) din cerință.

În acest caz, în fişierul de ieşire numere3.out se va scrie un singur număr natural s, reprezentând suma cifrelor lui a, b şi c.

Dacă valoarea lui p este 2, se va rezolva numai punctul b) din cerință.

În acest caz, fişierul de ieşire numere3.out va conține mai multe linii pe care se vor găsi câte două numere naturale separate printr-un spaţiu: valorile lui a şi c la fiecare pas al jocului. Pe ultima linie se va găsi 1, dacă primul jucător câştigă, 2 dacă cel de-al doilea jucător câştigă sau 0 dacă jocul se termină la egalitate.

Restricții și precizări

  • 0 < a < b < c < 10.000.000
  • Pentru rezolvarea corectă a primei cerinţe se acordă 20 de puncte, iar pentru cerința a doua se acordă 80 de puncte.

Exemplul 1:

numere3.in

1
25 51 75

numere3.out

25

Explicație

p = 1
2+5+5+1+7+5=25

Atenție! Pentru acest test se rezolvă doar cerința a)

Exemplul 2:

numere3.in

2
25 51 75

numere3.out

25 75
32 63
37 54
47 45
2

Explicație

p = 2

La cel de-al treilea pas, c devine mai mic decât b, jocul fiind câștigat de către al doilea jucător.

Atenție! Pentru acest test se rezolvă doar cerința b).

Exemplul 3:

numere3.in

2
25 46 75

numere3.out

25 75
32 63
37 54
47 45
0

Explicație

p = 2

La cel de-al treilea pas, a devine mai mare decât b, dar și c devine mai mic decât b. Astfel, jocul se termină la egalitate.

Atenție! Pentru acest test se rezolvă doar cerința b).

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 Numere3:

#include<stdio.h>
FILE *f,*g;

int play(int a,int b,int c,int p){
    int s,aux;

    if(p==1){
        s=0;
        while(a){
            s+=a%10;
            a/=10;
        }
        while(b){
            s+=b%10;
            b/=10;
        }
        while(c){
            s+=c%10;
            c/=10;
        }
        fprintf(g,"%d
",s);
        return 0;
    }

    fprintf(g,"%d %d
",a,b);
    while(a<c&&b>c){
        aux=a;
        s=0;
        while(aux){
            s+=aux%10;
            aux/=10;
        }
        a+=s;
        aux=b;
        s=0;
        while(aux){
            s+=aux%10;
            aux/=10;
        }
        b-=s;
        fprintf(g,"%d %d
",a,b);
    }

    if(a>=c)
        if(b<=c)
            return 0;
        else
            return 1;
    else
        return 2;


}
int main(){
    int p,a,b,c,w;
    f=fopen("numere3.in","r");
    g=fopen("numere3.out","w");
    fscanf(f,"%d%d%d%d",&p,&a,&c,&b);
    fclose(f);
    w=play(a,b,c,p);
    if(p==2)
        fprintf(g,"%d
",w);
    fclose(g);
    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 #623 Numere3

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #623 Numere3 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!