1880 - Platou 3

De la Universitas MediaWiki

Sursă: [1]

Cerinţa

Se consideră un şir format din n numere întregi. Șirul conține cel puțin un număr pozitiv. Să se determine lungimea maximă a unei secvenţe din şir care are proprietatea că este formată doar din valori strict pozitive.

Date de intrare

Fișierul de intrare platou3.in conține pe prima linie numărul n, iar pe a doua linie n numere întregi separate prin spații.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt corecte.". Fișierul de ieșire platou3.out va conține pe prima linie numărul k, reprezentând lungimea maximă a secvenței determinate. În caz contrar, se va afișa pe ecran: "Datele nu sunt comform restricțiilor impuse.".

Restricții și precizări

  • 1 ≤ n ≤ 1000
  • numerele de pe a doua linie a fișierului de intrare vor fi din intervalul [-99,99]
  • O secvenţă a unui şir constă în elemente aflate pe poziţii consecutive în şirul considerat.

Exemple

Exemplu 1

platou3.in
10
7 -22 -13 10 31 41 -6 2 10 8
platou3.out
3

Explicatie

În fișierul de intrare, secvențele de lungime maximă (k=3) sunt: 10 31 41 și 2 10 8.

Rezolvare

def citeste_sir():
    while True:
        try:
            with open('platou3.in') as fin:
                n = int(fin.readline())
                a = [int(x) for x in fin.readline().split()]
                if len(a) == n and all(-99 <= x <= 99 for x in a):
                    print("Datele sunt corecte.")
                    return a
                else:
                    print("Datele nu sunt conform restricțiilor impuse.")
        except ValueError:
            print("Trebuie introduse doar numere întregi.")


def platou3():
    with open("platou3.in") as fin, open("platou3.out", "w") as fout:
        n = int(fin.readline())
        a = [-1] + list(map(int, fin.readline().split()))
        l = 0
        lmax = 0
        for i in range(1, n + 1):
            if a[i] > 0 and a[i - 1] > 0:
                l += 1
                if l > lmax:
                    lmax = l
            else:
                l = 0
        fout.write(str(lmax + 1))


if _name_ == '_main_':
    platou3()

Explicații

Acest cod rezolvă problema de determinare a lungimii maxime a unei secvențe formate doar din valori strict pozitive într-un șir de întregi dat.
Funcția citeste_sir() citește datele de intrare din fișierul "platou3.in", verifică dacă acestea sunt valide și le returnează sub formă de listă de întregi.
Funcția platou3() deschide fișierul de intrare și fișierul de ieșire și citește datele de intrare, reprezentând un șir de întregi cu cel puțin un element pozitiv. Apoi, calculează lungimea maximă a unei secvențe din șir care are proprietatea că este formată doar din valori strict pozitive și o scrie în fișierul de ieșire.
Dacă fișierul este executat direct, atunci funcția platou3() este apelată.