#include /* Ukolem bylo napsat program, ktery naplni ctvercovou matici * dle rozmeru od uzivatel znaky a-z, a to "do sneka" (doprava, * dolu, doleva, nahoru, doprava, dolu...). Po pismenu 'z' * nasleduje zase 'a'. Priklad plneni (cisla rikaji posun od 'a'): * * 1 2 3 * 8 9 4 * 7 6 5 * * Vysledek tedy je: * * a b c * h i d * g f e * * Jedna se o obdobu: http://www.fi.muni.cz/~xbayer/ib001/2012/p1a.html */ int main(void) { int ha = 0; scanf("%d", &ha); // hrana char m[ha][ha]; // matice char z = 'a'; // znak, kterym plnime matici // "nulovani" matice mezerama (neni nutne, protoze // vsechny prvky budou naplneny, ale lze takto snadno // odhalit chybu v algoritmu, kdzy zustane misto prazdne for (int i = 0; i < ha; ++i) for (int j = 0; j < ha; ++j) m[i][j] = ' '; unsigned int delka_abecedy = 'z' - 'a' + 1; // delka abecedy unsigned int delta = 0; for (int i = 1; i < ha/2 + 1; ++i) { // staci jit vzdy +- do pulky matice, a to od indexu 1 for (int j = i-1; j < ha-i; ++j) // > (doprava) m[i-1][j] = z+(delta++%delka_abecedy); for (int j = i-1; j < ha-i; ++j) // V (dolu) m[j][ha-i] = z+(delta++%delka_abecedy); for (int j = i-1; j < ha-i; ++j) // < (doleva) m[ha-i][ha-j-1] = z+(delta++%delka_abecedy); for (int j = i-1; j < ha-i; ++j) // ^ (nahoru) m[ha-j-1][i-1] = z+(delta++%delka_abecedy); } if (ha % 2) { // prostredni prvek m[ha/2][ha/2] = z+(delta++%delka_abecedy); } // vypis matice for (int i = 0; i < ha; ++i) { for (int j = 0; j < ha; ++j) printf("%2c", m[i][j]); printf("\n"); } return 0; }