# PBinfo #960 – sirk – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: deivid

## Enunț

La testul de selecție la Centrul de Excelentă în Informatică din acest an, prima problemă ne cere să studiem un șir S de numere naturale nenule ai cărui primi termeni sunt:
1, 2, 1, 2, 3, 2, 1, 2, 3, 4, 3, 2, 1, 2, 3, 4, 5, 4, 3, 2, 1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1, 2, 3... 
să deducem regula prin care a fost construit și apoi să descoperim  cel  de-al K-lea termen al șirului  S. 

Știe cineva cum se rezolvă această problemă?

Cerinţă
Scrieţi un program care să determine cel de-al K-lea termen al șirului S.

Date de intrare
Programul citește de la tastatură numărul natural nenul K.

Date de ieșire
Programul va afișa pe ecran un număr natural reprezentând cel de-al K-lea termen al șirului S.

Restricții și precizări

1 ≤ K ≤ 2.000.000.000, număr natural
termenii șirului sunt numere naturale nenule strict mai mici decât 30.000

Exemplu 1
Intrare

20
Ieșire

2
Explicație
K=20
Șirul S: 1, 2, 1, 2, 3, 2, 1, 2, 3, 4, 3, 2, 1, 2, 3, 4, 5, 4, 3, 2  , 1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1, 2, ...
Se observă că cel de-al K-lea termen al șirului S este 2, valoare care se va afișa.

Exemplu 2
Intrare

5000
Ieșire

30

## Cod sursă C++

```cpp
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    int k, gr, p, cif;
    cin >> k;
    gr = sqrt(k);
    if(gr * gr != k)
		gr ++;
    p = k - (gr - 1)*(gr - 1); //pozitia in grupa
    if(p <= gr)
		cif = gr + 1 - p;
    else
		cif = p - gr + 1;
    cout << cif << endl;
    return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/960)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/960/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-960/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
