Pagini recente » Cod sursa (job #67431) | Cod sursa (job #845232) | Cod sursa (job #3169964) | Castori | Cod sursa (job #3152693)
#include <fstream>
using namespace std;
ifstream cin ("koba.in");
ofstream cout ("koba.out");
int gasit[10][10][10];
int Suma(int termen_1 , int termen_2 , int termen_3 , int lungime)
{
int suma = 0;
for (int indice = 1 ; indice <= lungime ; indice++)
{
suma += termen_1;
const int urmatorul = (termen_3 + termen_2 * termen_1) % 10;
termen_1 = termen_2; termen_2 = termen_3; termen_3 = urmatorul;
}
return suma;
}
int main ()
{
int lungime , termen_1 , termen_2 , termen_3;
cin >> lungime >> termen_1 >> termen_2 >> termen_3;
gasit[termen_1 %= 10][termen_2 %= 10][termen_3 %= 10] = 1;
int perioada = 2 , _termen_1 = termen_2 , _termen_2 = termen_3 , _termen_3 = (termen_3 + termen_2 * termen_1) % 10;
while (!gasit[_termen_1][_termen_2][_termen_3])
{
gasit[_termen_1][_termen_2][_termen_3] = perioada++;
const int urmatorul = (_termen_3 + _termen_2 * _termen_1) % 10;
_termen_1 = _termen_2; _termen_2 = _termen_3; _termen_3 = urmatorul;
}
int suma = Suma(termen_1 , termen_2 , termen_3 , min(gasit[_termen_1][_termen_2][_termen_3] - 1 , lungime));
lungime = max(0 , lungime - gasit[_termen_1][_termen_2][_termen_3] + 1);
if ((perioada -= gasit[_termen_1][_termen_2][_termen_3]) <= lungime) {
suma += lungime / perioada * Suma(_termen_1 , _termen_2 , _termen_3 , perioada);
lungime %= perioada;
}
cout << (suma += Suma(_termen_1 , _termen_2 , _termen_3 , lungime));
cout.close(); cin.close();
return 0;
}