const size_t N = 7; // N как я понимаю только нечетные int arr[N][N]; if ( N%2 == 0 ) { return; } int num = 1; // текущее число, которое ставится в позицию (x;y) в матрице int dx, dy; // dx, dy - смещение позиции x и y в матрице int x = N/2, y = N/2; // (x;y) - текущая позиция в матрице int direction = 0; // направление очередного витка спирали int count = 1; // количество вставляемых чисел в соотвествующий виток спирали int f = 0; // необходимо для изменения через 1 количества вставляемых чисел int tmp; // временно хранит count arr[x][y] = num; while ( num < N*N ) { switch (direction) { case 0: // left dx = 0; dy = -1; break; case 1: // down dx = +1; dy = 0; break; case 2: // right dx = 0; dy = +1; break; case 3: // up dx = -1; dy = 0; break; } tmp = count; while ( tmp ) { num++; x += dx; y += dy; arr[x][y] = num; tmp--; } direction = (direction+1)%4; f++; if ( f == 2 ) { f = 0; if ( x != 0 ) { // если не первая строка то увеличиваем count++; } } } for ( int i = 0; i < N; ++i ) { for ( int j = 0; j < N; ++j ) { cout.width(2); cout << arr[i][j] << " "; } cout << endl; } |