0608 - NkX

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

Cerinţa

Se dau două numere naturale n și k, cu proprietatea că 2*k < n. Să se afişeze pe ecran elementele unei matrice pătratice de dimensiune n, formată din valorile 1 şi 2, construită astfel:

  • valorile de pe diagonala principală sunt 1;
  • valorile de pe k pseudodiagonale paralele cu diagonala principală şi situate imediat deasupra acesteia sunt 1;
  • valorile de pe k pseudodiagonale paralele cu diagonala principală şi situate imediat sub aceasta sunt 1;
  • valorile de pe diagonala secundară sunt 1;
  • valorile de pe k pseudodiagonale paralele cu diagonala secundară şi situate imediat deasupra acesteia sunt 1;
  • valorile de pe k pseudodiagonale paralele cu diagonala secundară şi situate imediat sub aceasta sunt 1;
  • restul valorilor din matrice sunt 2.

Date de intrare

Programul citește de la tastatură numerele n k.

Date de ieșire

Programul va afișa pe ecran matricea construită, câte o linie a matrice pe o linie a ecranului, elementele de pe o line fiind separate prin exact un spaţiu.

Restricţii şi precizări

  • 1 ⩽ n ⩽ 100

Exemplu

Intrare
10 1
Ieșire
Datele de intrare corespund restrictiilor impuse
1 1 2 2 2 2 2 2 1 1
1 1 1 2 2 2 2 1 1 1
2 1 1 1 2 2 1 1 1 2
2 2 1 1 1 1 1 1 2 2
2 2 2 1 1 1 1 2 2 2
2 2 2 1 1 1 1 2 2 2
2 2 1 1 1 1 1 1 2 2
2 1 1 1 2 2 1 1 1 2
1 1 1 2 2 2 2 1 1 1
1 1 2 2 2 2 2 2 1 1


Exemplu 2

Intrare
121 210
Ieșire
Datele de intrare nu corespund restrictiilor impuse


Rezolvare

def validare(nr, bare1):  # functia de validare a datelor de intrare

    if not isinstance(nr, int) or nr < 1 or nr > 100:
        raise ValueError("Datele de intrare nu corespund restrictiilor impuse")

    if not isinstance(bare1, int) or bare1 < 0 or bare1 > 50:
        raise ValueError("Datele de intrare nu corespund restrictiilor impuse")

    print("Datele de intrare corespund restrictiilor impuse")


def main():
    # Solicităm introducerea numerelor n și k
    print("Introduceți numerele n și k, separate printr-un spațiu: ")
    n, k = map(int, input().split())

    try:
        validare(n, k)  # apelul functiei de validare
    except ValueError as e:
        print(e)
        return

    # Inițializăm matricea cu valori de 2
    matrice = [[2] * n for _ in range(n)]

    # Parcurgem fiecare element din matrice
    for i in range(n):
        for j in range(n):
            # Dacă elementul se află pe una dintre diagonalele specificate, îl setăm la 1
            if abs(i - j) <= k or abs(i + j - n + 1) <= k:
                matrice[i][j] = 1

    # Afișăm matricea, fiecare linie pe o linie nouă și elementele separate prin spațiu
    for linie in matrice:
        print(' '.join(map(str, linie)))


if __name__ == "__main__":
    main()