1767 - Multiple

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

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

Dacă datele sunt introduse corect, pe ecran se va afișa: "Date de intrare valide.", apoi 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
Date de intrare valide

multiple.out

2
7
27
223
54

Rezolvare

def validare_date(n):
    if n < 1 or n > 10000:
        print("n trebuie sa fie intre 1 si 10000")
        return False
    return True


def multiple(n):
    for i in range(n):
        a, b = map(int, fin.readline().strip().split())
        if a == b:
            fout.write(str(2 * b) + "\n")
        elif a < b:
            fout.write(str(b) + "\n")
        else:
            fout.write(str(b - (a % b) + a) + "\n")
    fin.close()
    fout.close()


if __name__ == '__main__':
    fin = open("multiple.in")
    fout = open("multiple.out", "w")

    n = int(fin.readline().strip())
    if validare_date(n):
        print("Date de intrare valide")
        multiple(n)

Explicatie cod:

Funcția validare_date(n) primește un număr n și verifică dacă acesta se încadrează în intervalul [1, 10000]. Dacă n nu respectă această condiție, se afișează un mesaj de eroare și funcția returnează False. În caz contrar, returnează True. Funcția multiple(n) primește un număr n și efectuează un set de operații pentru n iterații. În fiecare iterație, se citesc două numere a și b folosind funcția fin.readline().strip().split(). Apoi, se efectuează următoarele verificări: Dacă a este egal cu b, se înmulțește b cu 2 și rezultatul este scris în fișierul de ieșire. Dacă a este mai mic decât b, se scrie b în fișierul de ieșire. Dacă a este mai mare decât b, se calculează diferența b - (a % b) + a și rezultatul este scris în fișierul de ieșire. În blocul if __name__ == '__main__':, se deschid fișierele de intrare și de ieșire (multiple.in și multiple.out). Se citește prima linie din fișierul de intrare pentru a obține n. Apoi, se verifică dacă datele de intrare sunt valide utilizând funcția validare_date(). Dacă datele sunt valide, se afișează un mesaj de confirmare, se apelează funcția multiple() și se efectuează operațiile pentru n iterații. În final, se închid fișierele de intrare și de ieșire. Codul primește date de intrare din fișierul "multiple.in", validează datele și efectuează operații pentru n iterații, în funcție de valorile citite din fișier. Rezultatele sunt scrise în fișierul "multiple.out".