0608 - NkX
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
- 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
Rezolvare
<syntaxhighlight lang="python" line> def main():
# Citim numerele n și k de la tastatură n, k = map(int, input().split())
# 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()
</syntaxhighlight>