fbpx

Problema #2766 – Gradient – Rezolvari PBInfo

de Mihai-Alexandru

RGB

Orice culoare poate fi reprezentată drept o combinație de intensități de roșu (RED), verde (GREEN) și albastru (BLUE). Calculatorul tău folosește, cel mai probabil, culori reprezentate pe 24 de biți, câte 8 rezervați fiecărei dintre cele trei culori anterior menționate.

Gradient

Se consideră un gradient de ordin n dintre două culori x și y totalitatea culorilor prin care trece culoarea x pentru a ajunge culoarea y în exact n pași. De exemplu, pentru o culoare x=(0,10,20) și o culoare y=(0,40,80), culorile ce compun gradientul de 4 pași sunt:

  • (0,10,20);
  • (0,20,40);
  • (0,30,60);
  • (0,40,80);

Există cazuri în care una sau mai multe culori conține valori raționale. În acest caz, doar partea lor întreagă va fi luată în considerare.

Cerința

Dându-se două culori valide (reprezentate fiecare prin câte 3 numere) și numărul n, calculați toate culorile prin care va trece prima pentru a deveni a doua.

Date de intrare

Programul citește de la tastatură numerele R1, G1, B1, R2, G2, B2, n, în această ordine, cu semnificația din enunț.

Date de ieșire

Programul va afișa pe ecran n perechi (câte una pe linie) de câte trei numere fiecare, separate printr-o virgulă și un spațiu (, ), având semnificația din enunț.

Restricții și precizări

  • 2 ≤ n ≤ 1000;
  • Culorile inițiale sunt valide;
  • Valorile primei culori nu sunt neapărat mai mici decât valorile celei de a doua.

Exemplu

Intrare

0 10 20 0 40 80 4

Ieșire

0, 10, 20
0, 20, 40
0, 30, 60
0, 40, 80

Explicație

Acesta este exemplul descris în enunț.

…sau:

Intrare

0 0 0 23 2 20 3

Ieșire

0, 0, 0
11, 1, 10
23, 2, 20

…sau:

Intrare

23 2 20 0 0 0 3

Ieșire

23, 2, 20
11, 1, 10
0, 0, 0
#include <bits/stdc++.h>

using namespace std;

int r, g, b, r1, r2, g1, g2, b1, b2, n, i;

int main()
{
    cin >> r1 >> g1 >> b1 >> r2 >> g2 >> b2 >> n;
    
    r = r2 - r1, g = g2 - g1, b = b2 - b1, --n;
    
    cout << r1 << ", " << g1 << ", " << b1 << '\n';
    
    for (int i = 1; i <= n; ++i)
        cout << (int)(r1 + r * i / (double)n) << ", " << (int)(g1 + g * i / (double)n) << ", " << (int)(b1 + b * i / (double)n) << '\n';
    
    return 0;
}
Comentarii

S-ar putea sa iti placa