Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

Lyrik

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
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;
}

Всего записей: 388 | Зарегистр. 04-04-2006 | Отправлено: 02:25 17-10-2009
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru