In randurile urmatoare am dori sa va aratam niste solutii surprinzatoare la probleme care au fost date la concursuri (Olimpiada municipala de informatica Iasi 2013) – si nu numai.
O prima problema gasita pe pbinfo ar fi: problema XYZ (#2096)
Un numar natural se numeste “numar xyz
” daca are x
cifre, prima cifra a sa este egala cu y
si urmatoarele cifre sunt egale cu
z
. Scrieti un program care sa determine “numarul xyz
” pentru x, y, z
numere naturale date.
Daca se citeste atent textul se poate vedea ca numarul final care se doreste a fi format, nu va avea 3 cifre ci x cifre unde 1 <= x <= 9.
De exemplu (dam exemplul din problema), daca x = 5 numarul nostru va trebui sa aiba 5 cifre, daca y = 4 numarul nostru va avea prima cifra 4 urmata de restul 4 cifre de 3 atat cat arata z citit. De ce numarul trebuie sa contina 4 valori de z? Pentru ca din cele x cifre pe care trebuie sa le aiba numarul in total, y a ocupat o prima pozitie a numarului deci au ramas x-1 pozitii de ocupat pentru cifra z. Numarul va fi 43333.
Problema de pe site se cere rezolvata folosind fisiere – nu insistam pe acest aspect. Vrem sa evidentiem simplitatea algoritmului:
#include <fstream>
using namespace std;
ifstream cin(„xyz.in”);
ofstream cout(„xyz.out”);
int x,y,z,i;
int main() {
cin>>x>>y>>z;
cout<<y;
for (i = 1; i < x; i ++)
cout<<z;
cin.close(); cout.close();
return 0;
}
Nu cred ca se poate ceva mai simplu de atat. Nu se formeaza efectiv un numar prin inmultirea cu factorul 10 a cifrelor si deplasarea lor spre stanga. Este o altfel de rezolvare, mai transparenta si mai fluida. Cealalta solutie va lasam sa o implementati singuri.
Daca v-a placut articolul nostru va promitem ca vor mai fi si altele similare!