fbpx

Problema #623 – Numere3 – Rezolvari PBInfo

de Mihai-Alexandru

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.

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

#include <bits/stdc++.h>
using namespace std;
ifstream fin("numere3.in");
ofstream fout("numere3.out");
int sum(int n)
{
    int s = 0;
    while(n != 0)
    {
        s += n % 10;
        n /= 10;
    }
    return s;
}
int main()
{
    int a , b , c , p;
    fin >> p >>a >> b >> c;
    if(p == 1)
    {
        fout << sum(a) + sum(b) + sum(c);
    }
    else
    {
        fout << a <<" " << c << endl;
        while(a < b && c > b)
        {
            a = a + sum(a);
            c = c - sum(c);
            fout << a <<" "<< c << endl;
        }
        if(a >= b && c <=b) fout << 0;
        else if(a >= b && c > b) fout << 1;
        else fout << 2;
    }

    fin.close();
    fout.close();

    return 0;
}
Comentarii

S-ar putea sa iti placa