1767 - Multiple
Sergiu, fiind un elev talentat în ceea ce priveşte informatica, doreşte pe cât posibil să-şi ajute prietenii în rezolvarea problemelor. Prietenii lui au venit la el, fiind foarte confuzi în legătură cu o anumită problemă: Ei au un set de T întrebări de forma: Care este cel mai mic număr strict mai mare decât n, divizibil cu k? Fiind ocupat cu pregătirea pentru OJI, el vă roagă pe voi să-l ajutaţi!
Cerința
Pentru fiecare din cele T întrebări, să se afle cel mai mic număr strict mai mare decât n care este divizibil cu k.
Date de intrare
Fișierul de intrare multiple.in conține pe prima linie numărul T, iar următoarele T linii conţin câte două numere, n şi k, cu semnificaţia din enunţ.
Date de ieșire
Fișierul de ieșire multiple.out va conține pe T linii, pentru fiecare întrebare, numărul cerut.
Restricții și precizări
1 ≤ T ≤ 10000 se recomandă utilizarea tipurilor de date pe 8 octeţi (64 de biţi) dacă reuşiţi să-l ajutaţi pe Sergiu, pe lângă cele 100 de puncte, probabil el vă va face cinste şi cu o sticlă de apă minerală
Exemplu:
multiple.in 5 1 2 3 7 24 9 13 223 45 9
multiple.out 2 7 27 223 54
Rezolvare
<syntaxhighlight lang="python" line>
- include <iostream>
- include <fstream>
using namespace std;
// functie de validare pentru n si k bool valid(int n, int k) {
return (n >= 1 && n <= 1e18 && k >= 1 && k <= 1e9);
}
int main() {
int T; ifstream fin("multiple.in"); ofstream fout("multiple.out");
fin >> T;
for (int i = 0; i < T; i++) { long long n, k; // folosim long long pentru a stoca numerele mari fin >> n >> k;
// verificam daca n si k sunt valide, altfel afisam -1 si continuam cu urmatoarea iteratie if (!valid(n, k)) { fout << "-1\n"; continue; }
// calculam cel mai mic multiplu al lui k care este mai mare decat n long long multiple = (n / k + 1) * k;
fout << multiple << "\n"; }
fin.close(); fout.close();
return 0;
} </syntaxhighlight>
Explicatie
Pentru a rezolva problema, vom folosi o buclă for pentru a parcurge cele T întrebări. Pentru fiecare întrebare, citim valorile n și k din fișierul de intrare, apoi verificăm dacă valorile sunt valide folosind funcția de validare valid().
Dacă valorile nu sunt valide, afișăm -1 și continuăm cu următoarea iteratie a buclei for. Dacă valorile sunt valide, calculăm cel mai mic multiplu al lui k care este mai mare decât n. Aceasta poate fi calculat prin împărțirea lui n la k, adăugarea valorii 1 și apoi înmulțirea cu k.
La final, afișăm rezultatele pentru fiecare întrebare în fișierul de ieșire și închidem fișierele de intrare și de ieșire.