[Homework] C# Basics - Loops - SpiralMatrix** - Only with Loops
Здравейте колеги, реших задачата по по-лесния начин - с масив, но Наков беше споменал на лекция,
че има възможност да се реши само с цикли. Вярно, отне ми половин ден, но беше още един добър начин да си потренирам мозъка.
Накратко да разясня решението, защото не става много ясно от толкова много променливи. Разделяме
матрицата на 4 парчетата м/у двата диагонала. Като се има предвид, че първото число винаги е 1,
можем да намерим стойността на всяко число по левият диагонал на матрицата (до средата): 4*(n-
2*к)-4, където n е големината на матрицата, а k е минималният брой вложени цикли (0 <= 2*k <= (n+1)/2). Ето един пример за матрица с 5 елемента:
1 | 2 | 3 | 4 | 5 |
16 | 17 | 18 | 19 | 6 |
15 | 24 | 25 | 20 | 7 |
14 | 23 | 22 | 21 | 8 |
13 | 12 | 11 | 10 | 9 |
1
1 --> 4*(5-2*0)-4 = 16 |+ 1 = 17
17--> 4*(5-2*1)-4 = 8 |+17 = 25
След като съм намерил началните числа, обхождам матрицата от вън навътре само по краищата, за да
намеря числото за отпечатване спрямо индексите на матрицата. Като с 4 if-а проверявам дали е горен,
долен ред или лява, или дясна колона:
0 | 0 | 0 | 0 | 0 |
3 | 0 | 0 | 0 | 1 |
3 | 3 | 0 | 1 | 1 |
3 | 3 | 2 | 2 | 1 |
3 | 2 | 2 | 2 | 2 |
Дано съм заинтригувал някого ...