1469 - Concurs Info

De la Universitas MediaWiki

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 1
Ieșire
0 1 1


Exemplul 1

Intrare
3 110 10 1
Ieșire
0 1 1


Rezolvare

#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)