1694 - Norocos: Diferență între versiuni

De la Universitas MediaWiki
Linia 30: Linia 30:
== Exemplul 1 ==
== Exemplul 1 ==
; Intrare
; Intrare
: 4
: 1
: 9 3
: 165 12 33 30 5 18 105 15 4
; Ieșire
; Ieșire
: Datele corespund cerințelor.
: 5 165
: 576
<br>
<br>


== Rezolvare ==  
== Rezolvare ==  

Versiunea de la data 2 aprilie 2023 20:23

Sursa: [1]

Cerinţa

Un număr natural nenul m se numește norocos dacă pătratul lui se poate scrie ca sumă de m numere naturale consecutive. Un număr natural m se numește k-norocos, dacă este egal cu produsul a exact k numere prime distincte. Observați că între cele două proprietăți definite nu există nicio legătură.

Dându-se k și N numere naturale, scrieți un program care să determine:

a) Cel mai mic și cel mai mare număr norocos dintre cele N numere citite b) Câte numere k-norocoase sunt în șirul de N numere citite

Date de intrare

Programul conține pe prima linie un număr natural C. Pentru toate testele de intrare, numărul C are una din valorile 1 sau 2. Pe linia a doua a programul se găsesc numerele naturale N și k, cu semnificația din enunț, iar pe a treia linie se găsesc N numere naturale, separate prin câte un spațiu.

Date de ieșire

Dacă C=1, se va rezolva numai punctul a). În acest caz, în program se vor scrie, separate printr-un spațiu, în această ordine, cel mai mic și cel mai mare număr norocos dintre cele N numere citite. Dacă nu există niciun număr norocos se va afișa valoarea 0. Dacă există un singur număr norocos, acesta se va afișa de două ori.

Dacă C=2, se va rezolva numai punctul b). În acest caz, program se va scrie un singur număr reprezentând numărul de numere k-norocoase citite.

Dacă datele sunt introduse corect, programul va rula.

În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse.".

Restricţii şi precizări

1 ≤ N ≤ 1000 2 ≤ k ≤ 30 1 ≤ numerele citite de pe a treia linie a programul ≤ 2 000 000 000

Pentru rezolvarea corectă a primei cerinţe se acordă 40 de puncte, pentru rezolvarea corectă a celei de-a doua cerințe se acordă 60 de puncte.

Exemplul 1

Intrare
1
9 3
165 12 33 30 5 18 105 15 4
Ieșire
5 165


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)