Informatică, întrebare adresată de Izolda, 9 ani în urmă

#608 nkx pbinfo 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

Răspunsuri la întrebare

Răspuns de stassahul
5
#include<iostream>

using namespace std;

int n,k;

int main()
{

    cin >> n >> k;

    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
            if(i==j or n-i+1==j) cout << 1 << " ";
                else
                {
                    int nr=1,c=0;
                    while(nr!=k+1)
                    {
                        if(i+nr==j or i-nr==j or n-i+1+nr==j or n-i+1-nr==j)
                        {
                            cout << 1 << " ";
                            c++;
                            break;
                        }
                        nr++;
                    }
                    if(c==0) cout << 2 << " ";
                }
        cout << endl;
    }

    return 0;

}

stassahul: Wow, da prostii am scris... Cred ca exista vreo solutie mai usoara, ca ceea ce am facut eu, deloc numi place.
stassahul: Nam prea inteles daca trebuie sau nu sa ai matricea in memorie, daca ceva in loc de cout pui m[i][j]=1 sau 2 si pe urma o afisezi.
Alte întrebări interesante