Se citesc de la tastatură două numere naturale s1 si s2 (0<s1≤18, 0≤s2≤18) si se cere scrierea în fisierul BAC.TXT, fiecare pe câte o linie, în ordine strict crescătoare, a tuturor numerelor naturale cu exact 5 cifre, pentru care suma primelor două cifre este egală cu s1, iar suma ultimelor două cifre este egală cu s2. Pentru determinarea numerelor indicate se utilizează un algoritm eficient din punct de vedere al timpului de executare.
Exemplu: dacă
s1=8
, iar
s2=7
, atunci
35725
este unul dintre numerele care respectă proprietatea cerută
(3+5=8 si 2+5=7)
.
#include <iostream>
#include <fstream>
using namespace std;
ofstream fout("BAC.txt");
int main()
{
int s1, s2;
cin >> s1 >> s2;
int c1, c2, c3, c4, c5; // Cele cinci cifre care alcatuiesc numerele cerute
int l1, l2; // Limitele iteratiilor (veti vedea imediat ce vreau sa spun)
if(s1 > 9) l1 = 9;
else l1 = s1;
if(s2 > 9) l2 = 9;
else l2 = s2;
for(c1 = 1; c1 <= l1; c1++) // Prima cifra nu poate fi zero
{
c2 = s1 - c1;
if(c2 > 9) continue; // O cifra nu poate fi un numar de doua cifre
for(c3 = 0; c3 <= 9; c3++) // Cifra din mijloc va fi mereu intre 0 si 9
{
for(c4 = 0; c4 <= l2; c4++)
{
c5 = s2 - c4;
if(c5 > 9) continue;
fout << c1 * 10000 + c2 * 1000 + c3 * 100 + c4 * 10 + c5 << '\n';
}
}
}
return 0;
}
Niciun comentariu:
Trimiteți un comentariu
Rețineți: Numai membrii acestui blog pot posta comentarii.