# PBinfo #1083 – Sir5 – Rezolvare C++

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

## Enunț

Se generează un şir de numere naturale ai cărui primi termeni sunt, în ordine: 

1, 12, 21, 123, 231, 312, 1234, 2341, 3412, 4123, 12345, 23451,...

Cerinţe:
Deduceţi regula după care sunt generaţi termenii şirului şi scrieţi un program care să citească numerele naturale k, x, a şi b şi care să determine:

a) ultima cifră a sumei tuturor termenilor şirului care sunt formaţi din cel mult k cifre; 
b) succesorul termenului x în şirul dat, x fiind un termen al şirului; 
c) numărul de termeni ai şirului care au cifra cea mai semnificativă egală cu a şi nu conţin în scrierea lor cifra b.

Date de intrare
Fișierul de intrare sir5.in conţine o singură linie pe care sunt scrise cele patru numere naturale k, x, a şi b, separate prin câte un spaţiu.

Date de ieșire
Fișierul de ieșire sir5.out va conține 3 linii: 


pe prima linie se va scrie un număr natural reprezentând ultima cifră a sumei tuturor termenilor şirului care sunt formaţi din cel mult k cifre;
pe a doua linie se va scrie un număr natural reprezentând succesorul termenului x în şirul dat;
pe a treia linie se va scrie un număr natural reprezentând numărul de termeni ai şirului care au cifra cea mai semnificativă egală cu a şi nu conţin în scrierea lor cifra b.

Restricții și precizări

Numerele k, x, a şi b sunt naturale nenule
1 ≤ k ≤ 9
x este un termen al şirului din enunţ şi are succesor în şir
succesorul termenului x în şir este termenul care urmează imediat după x (de exemplu, dacă x=2341 atunci succesorului lui x în şir este 3412)
1 ≤ x < 900000000
1 ≤ a ≤ 9; 1 ≤ b ≤ 9;   a ≠ b
cifra cea mai semnificativă a unui număr natural este prima cifră din scrierea sa, de la stânga la dreapta (de exemplu cifra cea mai semnificativă a numărului 32156 este 3)
Pentru rezolvarea cerinţei a) se acordă 30% din punctaj, pentru cerinţa b) 40% din punctaj şi pentru cerinţa c) 30% din punctaj.

Exemplu:
sir5.in

3 45123 3 6
sir5.out

0
51234
3
Explicație

Termenii şirului formaţi fiecare din cel mult k=3 cifre sunt: 1, 12, 21, 123, 231, 312. Suma lor fiind egală cu 700, pe prima linie a fişierului sir5.out se va scrie cifra 0 (ultima cifră a sumei).
Succesorul termenului 45123 este 51234, valoare care se va scrie pe a doua linie a fişierului sir5.out.
Sunt 3 numere care încep cu cifra 3 şi care nu conţin cifra 6 şi anume: 312, 3412, 34512. Astfel, numărul 3 se scrie pe a treia linie a fişierului sir5.out.

## Cod sursă C++

```cpp
/* autor prof.Minca Carmen
   Liceul Teoretic "Ion Neculce" Bucuresti */
#include<fstream>
using namespace std;
int main()
{
	ofstream g("sir5.out");
	 long x,y,p=1,z;
	 int k,s=0,a,b,i,c,sa;
	 ifstream f("sir5.in");
	 f>>k>>x>>a>>b;
	 s=1;  sa=1; 
	 for(i=2;i<=k;i++)
	 {
	   s=(s+sa+i)%10; 
	   sa=(sa+i)%10; 
	 }
	 g<<s<<endl;
	 //cerinta b)
	 y=x; k=1;
	 while(y>9)   
	   { k++; y/=10; p=p*10; }
	 if(y==k)                     
	   { z=0;                     
		 for(i=1;i<=k+1; i++)
		 z=z*10+i;
	   }
	 else  z=(x%p)*10+y;         
	g<<z<<endl;
	//cerinta c)
	 if(a<b) g<<b-a;
	   else g<<0;
	f.close();
	g.close();
}
```

## Resurse

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