Консультация № 73043
28.01.2007, 20:13
0.00 руб.
0 2 2
Уважаемые эксперыты. Большая просьба поможите решить задачку:
++++++++++++++++++++++++++++++++++++++++++++++++++
Составить программу, которая заполняет квадратную матрицу порядка натуральными числами 1, 2, 3,…, , записывая их «по спирали» с выводом результата на экран, используя массивы значений.
++++++++++++++++++++++++++++++++++++++++++++++++++

Сам бы решил, но уже голова пухнет никак не соображу. Прога на Visual C++ 2005, консольное приложение. Заранее благодарю всех ответивших.

PS. Извиняюсь что не всем оценки поставил за предыдущий вопрос, инет не работал.

Обсуждение

Неизвестный
28.01.2007, 20:50
общий
это ответ
Здравствуйте, Кузнецов С.Н.!
В приложении показан алгоритм заполнения квадратной матрицы по спирали натуральными числами и вывода результата на экран.

Приложение:
//Алгоритм заполнения матрицы по спирали.#include "stdafx.h"#include <iostream>using namespace std;int _tmain(int argc, _TCHAR* argv[]){int const n=11; int A[n][n]; int i=1,j,k,p=n/2; for(k=1;k<=p;k++)/*Цикл по номеру витка*/ { for (j=k-1;j<n-k+1;j++) A[k-1][j]=i++;/*Определение значений верхнего гор столбца*/ for (j=k;j<n-k+1;j++) A[j][n-k]=i++;/* --//-- По правому вертикальному столбцу*/ for (j=n-k-1;j>=k-1;--j) A[n-k][j]=i++;/* --//-- по нижнему горизонтальному столбцу*/ for (j=n-k-1;j>=k;j--) A[j][k-1]=i++;/* --//-- по левому вертикальному столбцу*/ } if (n%2==1) A[p][p]=n*n; for(i=0;i<n;i++) for(j=0;j<n;j++) { printf(" %4d ",A[i][j]); if(j==n-1) printf("\n"); } }
Неизвестный
28.01.2007, 21:31
общий
это ответ
Здравствуйте, Кузнецов С.Н.!

Квдратную матрицу порядка ??
Такая задачка обсуждалась на различных форумах с различным успехом. Лучшее решение, на мой взгляд, здесь -
http://www.progz.ru/forum/index.php?showtopic=20416&mode=linear



Приложение:
int _tmain(int argc, _TCHAR* argv[]){ // инициализация int x=0, n=64, m=15, q=8, d=8; int a[8][8]; int newd[17]; newd[0] = -1; newd[7] = 8; newd[9] = -8; newd[16] = 1; // заполнение while (n) { a[x >> 3][x & 7] = 65 - n--; if (!(--q)) { q = (m--) >> 1; d = newd[d+8]; } x += d; } // вывод на экран for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { std::cout << a[i][j] << " "; } std::cout << std::endl; } return 0;}
Форма ответа