0881 - Generare4

De la Universitas MediaWiki

Cerinţă

Se dă un număr natural n. Construiți un șir format din primele 2n numere naturale, dispuse astfel:

se pleacă de la șirul 1 2 exact la mijlocul acestui șir se inserează șirul 3 4 și se obține 1 3 4 2 exact la mijlocul acestui șir se inserează șirul 5 6 7 8 și se obține 1 3 5 6 7 8 4 2 etc în general, la mijlocul șirului format din primele 2k numere naturale se inserează șirul ordonat format din următoarele 2k numere naturale.

Date de intrare

Programul citește de la tastatură numărul n.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele introduse sunt valide!", apoi se va afișa pe ecran elementele șirului construit, separate prin câte un spațiu, care îndeplinesc condițiile date. În cazul în care datele nu respectă restricțiile, se va afișa mesajul "Datele introduse nu sunt invalide!".

Restricţii şi precizări

  • 2 ≤ n ≤ 15

Exemple

Exemplul 1

Intrare
Introduceti numarul n: 4
Ieșire
Datele introduse sunt valide!
1 3 5 6 9 10 11 12 13 14 15 16 7 8 4 2

Rezolvare

def construieste_sirul(n):
    sir = [1, 2]
    for k in range(1, n+1):
        sir_nou = list(range(2*k+1, 4*k+1))
        mijloc = len(sir) // 2
        sir = sir[:mijloc] + sir_nou + sir[mijloc:]
    return sir


def validare_intrare(input_str):
    try:
        n = int(input_str)
        if n < 2 or n > 15:
            raise ValueError()
        return n
    except ValueError:
        print("Input invalid. Introduceti un numar natural intre 2 si 15.")
        return None


def main():
    input_str = input("Introduceti numarul n: ")
    n = validare_intrare(input_str)
    while n is None:
        input_str = input("Introduceti numarul n: ")
        n = validare_intrare(input_str)

    sir = construieste_sirul(n)
    print(" ".join(str(x) for x in sir))


if __name__ == '__main__':
    main()

Explicație rezolvare

  1. 1 Funcția validare_intrare(input_str) primește o intrare sub formă de string, input_str, și verifică dacă poate fi convertită într-un număr natural între 2 și 15 inclusiv. În cazul în care stringul nu poate fi convertit sau numărul este în afara intervalului specificat, se afișează un mesaj de eroare, altfel se returnează numărul natural.
  1. 2 Funcția construieste_sirul(n) primește un număr natural, n, și construiește șirul de numere întregi cu ajutorul următoarei proceduri:

șirul inițial este [1, 2] pentru fiecare k între 1 și n, se construiește un șir nou de numere întregi, sir_nou, care conține numerele de la 2k+1 până la 4k+1 se ia mijlocul șirului inițial, sir, și se inserează numerele din sir_nou astfel încât ele să fie înlocuite cu numerele anterioare mijlocului se concatenează cele două părți ale șirului inițial (înainte și după mijloc) cu șirul obținut în pasul anterior Funcția returnează șirul construit.

  1. 3 Funcția main() este funcția principală a programului, care primește input-ul utilizatorului și afișează output-ul corespunzător. Se folosește funcția validare_intrare(input_str) pentru a valida input-ul și construieste_sirul(n) pentru a construi șirul. Acesta este afișat la finalul programului, sub formă de string concatenat cu ajutorul metodei " ".join().