1469 - Concurs Info
Sursa: [1]
Cerinţa
Ana şi Andreea s-au provocat la un concurs de “Info”. Fiecare îi dă celeilalte o problemă de informatică să o rezolve, în final stabilindu-se cîştigătoarea. Pentru această întrecere ele au la dispoziţie trei numere, a, b şi c cu care să formuleze câte două întrebări. Iată care sunt întrebările: Ana: -Care sunt cele mai mari trei cifre ale lui b? Andreea: -Cât este suma numerelor divizibile cu c, care sunt cuprinse strict între a şi b? Ana: -Câte numere cuprinse strict între a şi b au în scrierea lor binară exact trei cifre egale cu 1? Andreea: -Află două numere diferite d şi e, cu d < e şi d minim, cuprinse strict între a şi b, pentru care diferenţa dintre produsul şi suma lor este egală cu b. După acest maraton informatic, Ana şi Andreea speră să obţină fiecare câte 100 de puncte, bineînţeles cu ajutorul vostru. Succes!
Date de intrare
Programul conține pe prima linie numerele naturale a, b, c şi cod despărţite prin spaţiu.
Date de ieșire
Programul va conține pe prima linie:
pentru cod=1, cele mai mari trei cifre ale lui b, în ordine crescătoare, despărţite prin spaţiu;
pentru cod=2, suma numerelor divizibile cu c, care sunt cuprinse strict între a şi b (dacă nu există asemenea numere se va afişa 0);
pentru cod=3, numărul numerelor cuprinse strict între a şi b care au exact trei cifre egale cu 1 în scrierea lor binară (dacă nu există se va afişa 0);
pentru cod=4, două numere d şi e, cu d < e şi d minim, scrise în ordine crescătoare, care sunt cuprinse strict între a şi b şi pentru care diferenţa dintre produsul şi suma lor este egală cu b ( dacă nu există aceste numere se va afişa 0 0).
Restricţii şi precizări
1 ≤ a < b ≤ 1.000.000.000
1 ≤ c < b
b are cel puţin 3 cifre
pentru cod=1 se pot obţine 16p, iar pentru cod egal cu 2, 3 sau 4 câte 28p
Exemplul 1
- Intrare
- 3 110 10 1
- Ieșire
- 0 1 1
Exemplul 2
- Intrare
- 3 110 10 2
- Ieșire
- 550
Exemplul 1
- Intrare
- 3 110 10 3
- Ieșire
- 34
Exemplul 1
- Intrare
- 3 110 10 1
- Ieșire
- 0 1 1
Rezolvare
<syntaxhighlight lang="python" line>
- 4273
def patrate_perfecte(n):
patrate = [] i = 1 while len(patrate) < n: patrat = i * i patrate.append(patrat) i += 1 return patrate
def calculeaza(numbers):
product = 1 for number in numbers: product *= number return product
def validare_numar(n):
if n < 1 or n > 10: return False return True
if __name__ == '__main__':
n = int(input("Introduceți numărul n: ")) if not validare_numar(n): print("Datele introduse nu corespund cerintelor.") else: squares = patrate_perfecte(n) product = calculeaza(squares) print("Datele introduse corespund cerintelor.") print(product)
</syntaxhighlight>