Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.93/1107: Рейтинг темы: голосов - 1107, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 09.11.2007
Сообщений: 7

Заполнение матрицы змейкой (по спирали)

27.11.2007, 12:57. Показов 222214. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Люди!Помогите!Пожалуста!У меня зачёт скоро!Не могу сделать прогу!В чём суть?!Пользователь должен ввести размерность матрици!Матрица квадратная!А программа должна заполнить её числами по порядку 1 2 3 4 5 ....как змейка, по часовой стрелке
Вот пример, чтоб было ясно
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
Люди!Помогите кто может!Выгонят же к чертям!!!Деньги препад не берёт!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.11.2007, 12:57
Ответы с готовыми решениями:

Заполнение матрицы змейкой (по спирали)
Написать программу, которая двумерный массив целых чисел размером 5х5 заполняет следующим образом: 1 2 3 4 5 16 17 18...

Заполнение матрицы змейкой
Здравствуйте, нужно заполнить матрицу змейкой(картинка змейки вложена). Матрица NxN (1<=N<=10), заполнить числами от 1 до N^2 - 1 по...

Заполнение матрицы змейкой
Дано натуральное N (1<=N<=10). Заполнить матрицу размера N*N целыми числами 0, 1, 2, 3, …, N^2–1 Как сделать, что бы матрицу заполнило...

23
Администратор
 Аватар для mik-a-el
87856 / 53177 / 249
Регистрация: 10.04.2006
Сообщений: 13,764
27.11.2007, 19:19
Лучший ответ Сообщение было отмечено как решение

Решение

Заполнение квадратной матрицы по спирали натуральными числами и вывода результата на экран:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#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");
  }   
}
16
Администратор
 Аватар для mik-a-el
87856 / 53177 / 249
Регистрация: 10.04.2006
Сообщений: 13,764
27.11.2007, 19:21
Лучший ответ Сообщение было отмечено как решение

Решение

Еще пример заполнения матрицы по спирали:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// Построить матрицу А(15x15)таким образом: 
// А(7,7)=1, затем, по спирали против
// часовой стрелки, увеличивая значение 
// очередного элемента на единицу и
// выделяя все простые числа красным цветом 
// заполнить матрицу
#include <stdio.h>
#include <conio.h>
void main(void)
{
   clrscr();
   int mas[15][15];
   int n=1,x=6,y=6,k=1;
   int i,j;
   while(1){
      mas[x][y]=k++;
      switch(n){
         case 1: x++;break;
         case 2: y--;break;
         case 3: x--;break;
         case 4: y++;break;
      }
      if(x==15) break;
      if(x==y && x<6) n=4;
      else if(x+y==12 && x<6) n=1;
      else if(x+y==12 && x>6) n=3;
      else if(x==y+1 && x>6) n=2;
   }
   for(i=0;i<15;i++)
   {
      for(j=0;j<15;j++)
      {
         textcolor(12);
         if(mas[j][i]>2)
         for(k=2;k<mas[j][i];k++)
         if(mas[j][i]%k==0) textcolor(15);
         cprintf("%3d ",mas[j][i]);
      }
      printf("\n");
   }
   getch();
}
4
1 / 1 / 0
Регистрация: 21.12.2007
Сообщений: 5
24.12.2007, 20:00
вопрос по первому коду: как сделать чтобы выводилось красиво в столбик?
1 2 3
8 9 4
7 6 5
а не как попало
0
4 / 3 / 2
Регистрация: 25.12.2007
Сообщений: 7
26.12.2007, 00:14
часть кода для вывода в виде матрицы:
C++
1
2
3
4
5
6
7
 
for(i=0;i<n;i++)
{
printf("\n");
 for(j=0;j<n;j++)
     printf("%4d ",A[i][j]);
}
3
Icy
28.05.2008, 19:09
подскажите плз....задание похожее...
надо сделать матрицу (9х9) и заполнить ПО часовой стрелке по спирали , начиная с середины

если нездам эту прогу, до екзамена недопустят ((
заранее спасибо
0 / 0 / 0
Регистрация: 13.11.2009
Сообщений: 22
13.11.2009, 14:06
а что значит вот эта запись?:
A[k-1][j]=i++
0
14 / 14 / 1
Регистрация: 14.12.2009
Сообщений: 8
14.12.2009, 23:29
mik-a-el, спасибо за первый пример!
А возможно ли по его аналогии сделать сортировку матрицы A(n,m), если n неравно m?
0
14 / 14 / 1
Регистрация: 14.12.2009
Сообщений: 8
15.12.2009, 02:57
Лучший ответ Сообщение было отмечено как решение

Решение

Хм, уже разобрался сам.. Проблема решилась путем упорного скрещивания двух различных кодов
Кому интересно, привожу код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <iostream>
#include <iomanip> // расширение функционала iostream,
                    // в частности setw()
    using namespace std;
 
int main()
{
int const n=5;
int const m=4;
 
int Arr[n][m];
int i=0, j, k = 0, p=1;
 
while (i < n*m) /*Цикл по номеру витка*/
 {
    k++;
    for (j=k-1;j<m-k+1;j++)
    {
        Arr[k-1][j]=p++;
        i++;
    }   /*Определение значений верхнего гор столбца*/ 
 
    for (j=k;j<n-k+1;j++)
    {
        Arr[j][m-k]=p++;
        i++;
    }   /* --//-- По правому вертикальному столбцу*/
 
    for (j=m-k-1;j>=k-1;j--)
    {
        Arr[n-k][j]=p++;
        i++;
    }   /* --//-- по нижнему горизонтальному столбцу*/ 
 
    for (j=n-k-1;j>=k;j--)
    {
        Arr[j][k-1]=p++;
        i++;
    }   /* --//-- по левому вертикальному столбцу*/
 
 }
 
for (int q=0; q<n; q++)
{
    for (int w=0; w<m; w++)
    {
        cout << setw(4) << Arr[q][w];
    };
    cout << endl;
}
 
return(0);
}
11
 Аватар для Gabberr
105 / 105 / 19
Регистрация: 13.10.2009
Сообщений: 406
13.04.2010, 21:42
А не могли бы решить эту же задачу следующим способом:
найти соотношение между значением элемента K и его индексами [i,j], то есть функцию вида F(K,N) = <i,j>, которая по номеру K элемента в змейке возвращает его координаты в матрице <i,j>; другими словами a[i,j]=K. При этом данная функция не долж-на использовать циклы – только элементарные арифметические действия и проверку различ-ных условий! Построив такую функцию можно простым перебором значений K от 0 до N2–1 находить индексы для каждого K с помощью функции F и записывать в матрицу К по найден-ным индексам.
0
0 / 0 / 0
Регистрация: 06.07.2010
Сообщений: 3
06.07.2010, 14:46
У меня почти такое-же, ток:
Выводится N строк по N чисел, разделённых пробелами. Не допускается начинать спираль в ином, кроме верхнего левого, углу, закручивать спираль против часовой стрелки или изнутри наружу.немогли бы помочь? (если можно, то на Си)
0
The_Marvel
22.09.2010, 17:24
У меня задача, похожая на разобранную, только спираль начинается с центрального элемента матрицы (матрица - квадрат нечётного размера). Заполнение так же осуществляется по часовой стрелке. Например:
6 7 8
5 0 1
4 3 2
Помогите, если можно. Не могу вывести закономерность
 Аватар для angels
2 / 2 / 3
Регистрация: 20.10.2010
Сообщений: 30
20.10.2010, 23:16
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<alloc.h>
void zapovn(int **, int);
int main()
{
    int n,i,j;
    int **arr;
    clrscr();
    printf("\nn=");
    scanf("%d",&n);
    arr=(int**)calloc(n,sizeof(int*));
    for(i=0;i<n;i++)
      arr[i]=(int*)calloc(n,sizeof(int));
    zapovn(arr,n);
    for(i=0;i<n;i++){
    for(j=0;j<n;j++)
    printf("%2d  ",arr[i][j]);
    printf("\n");}
    for(i=0;i<n;i++)
    free(arr[i]);
    free(arr);
    getch();
    return 0;
}
void zapovn(int **A, int m){
    int i,j,k,b,c;
    i=m/2;
    j=i;
    printf("\nvvedit masiv\n");
    scanf("%d",&A[i][j]);
    for(k=0,j=j-1;k<2;k++,i++)
      scanf("%d",&A[i][j]);
    for(k=0,j=j+1,i=i-1;k<2;k++,j++)
      scanf("%d",&A[i][j]);
    for(k=0,j=j-1,i=i-1;k<2;k++,i--)
      scanf("%d",&A[i][j]);
    for(b=3,c=4;b<=m;b+=2,c+=2)
    {  
    if(b==m){
    b=m-1;
    for(k=0,j=j-1,i=i+1;k<b;k++,j--)
      scanf("%d",&A[i][j]);
    break;
    }
    else
    for(k=0,j=j-1,i=i+1;k<b;k++,j--)
      scanf("%d",&A[i][j]);
    for(k=0,j=j+1,i=i+1;k<b;k++,i++)
      scanf("%d",&A[i][j]);
    for(k=0,j=j+1,i=i-1;k<c;k++,j++)
      scanf("%d",&A[i][j]);
    for(k=0,j=j-1,i=i-1;k<c;k++,i--)
      scanf("%d",&A[i][j]);
}
}
как-то так...правда на с...
1
1 / 1 / 0
Регистрация: 19.01.2011
Сообщений: 4
14.06.2011, 18:42
Сколько не сидел, так и не разобрался в коде программы...
Мне по заданию нужна матрица 9х9
5 6 7
4 1 8
3 2 9
как это сделать?
(на языке С не усложняя программу попросами к пользователю, типа: по часовой или против, размерность массива, с какой цифры начинать, всего это НЕ нужно)
ах да, и матрицу нужно заполнять линейной последовательностью чисел от 1 до 81, т.е. у пользователя вообще ничего не спрашивать.
1
semka
20.06.2012, 22:05
Цитата Сообщение от mik-a-el Посмотреть сообщение
Еще пример заполнения матрицы по спирали:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// Построить матрицу А(15x15)таким образом: 
// А(7,7)=1, затем, по спирали против
// часовой стрелки, увеличивая значение 
// очередного элемента на единицу и
// выделяя все простые числа красным цветом 
// заполнить матрицу
#include <stdio.h>
#include <conio.h>
void main(void)
{
   clrscr();
   int mas[15][15];
   int n=1,x=6,y=6,k=1;
   int i,j;
   while(1){
      mas[x][y]=k++;
      switch(n){
         case 1: x++;break;
         case 2: y--;break;
         case 3: x--;break;
         case 4: y++;break;
      }
      if(x==15) break;
      if(x==y && x<6) n=4;
      else if(x+y==12 && x<6) n=1;
      else if(x+y==12 && x>6) n=3;
      else if(x==y+1 && x>6) n=2;
   }
   for(i=0;i<15;i++)
   {
      for(j=0;j<15;j++)
      {
         textcolor(12);
         if(mas[j][i]>2)
         for(k=2;k<mas[j][i];k++)
         if(mas[j][i]%k==0) textcolor(15);
         cprintf("%3d ",mas[j][i]);
      }
      printf("\n");
   }
   getch();
}
а как сократить число элемента массива по 49-й, ведь их там 289?
0 / 0 / 0
Регистрация: 24.10.2012
Сообщений: 3
24.10.2012, 13:04
Доброго времени суток, у меня такой вопрос, как осуществить движение (к примеру данной) матрицы по спирали, визуально т.е. чтобы наблюдать каждый шаг?

Кликните здесь для просмотра всего текста


Цитата Сообщение от MrakSPb Посмотреть сообщение
Хм, уже разобрался сам.. Проблема решилась путем упорного скрещивания двух различных кодов
Кому интересно, привожу код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <iostream>
#include <iomanip> // расширение функционала iostream,
                    // в частности setw()
    using namespace std;
 
int main()
{
int const n=5;
int const m=4;
 
int Arr[n][m];
int i=0, j, k = 0, p=1;
 
while (i < n*m) /*Цикл по номеру витка*/
 {
    k++;
    for (j=k-1;j<m-k+1;j++)
    {
        Arr[k-1][j]=p++;
        i++;
    }   /*Определение значений верхнего гор столбца*/ 
 
    for (j=k;j<n-k+1;j++)
    {
        Arr[j][m-k]=p++;
        i++;
    }   /* --//-- По правому вертикальному столбцу*/
 
    for (j=m-k-1;j>=k-1;j--)
    {
        Arr[n-k][j]=p++;
        i++;
    }   /* --//-- по нижнему горизонтальному столбцу*/ 
 
    for (j=n-k-1;j>=k;j--)
    {
        Arr[j][k-1]=p++;
        i++;
    }   /* --//-- по левому вертикальному столбцу*/
 
 }
 
for (int q=0; q<n; q++)
{
    for (int w=0; w<m; w++)
    {
        cout << setw(4) << Arr[q][w];
    };
    cout << endl;
}
 
return(0);
}
0
0 / 0 / 0
Регистрация: 24.10.2012
Сообщений: 3
31.10.2012, 22:46
Если чуть точнее=) Дана матрица M x N (N, M <= 20, M и N задаются как параметры). Осуществить циклический сдвиг элементов матрицы, как на картинке(https://www.cyberforum.ru/atta... tid=194024). Каждый шаг сдвига осуществляется с некоторой временной задержкой (интервал задержки - параметр программы). Работа программы завершается по нажатию клавиши. Помогите пожалуйста с решением =)
0
0 / 0 / 0
Регистрация: 02.11.2012
Сообщений: 5
23.11.2012, 21:53
а как будет для матрицы вида:

21 22 23 24 25
20 13 12 11 10
19 14 7 8 9
18 15 6 3 2
17 16 5 4 1
0
 Аватар для Mr_vanDort
1 / 1 / 0
Регистрация: 14.11.2012
Сообщений: 10
17.02.2013, 18:15
Цитата Сообщение от Gabberr Посмотреть сообщение
А не могли бы решить эту же задачу следующим способом:
найти соотношение между значением элемента K и его индексами [i,j], то есть функцию вида F(K,N) = <i,j>, которая по номеру K элемента в змейке возвращает его координаты в матрице <i,j>; другими словами a[i,j]=K. При этом данная функция не долж-на использовать циклы – только элементарные арифметические действия и проверку различ-ных условий! Построив такую функцию можно простым перебором значений K от 0 до N2–1 находить индексы для каждого K с помощью функции F и записывать в матрицу К по найден-ным индексам.
http://imit.omsu.ru/vestnik/ar... ticle.html
А вот отсюда можно взять координиты..
0
1 / 1 / 0
Регистрация: 07.11.2013
Сообщений: 22
14.11.2013, 20:08
Может кто может помочь с такой матрицей
A[2*n+1][2*n+1]
12 11 10 9 24
13 2 1 8 23
14 3 0 7 22
15 4 5 6 21
16 17 18 19 20

Пожалуйста кто может на языке C++ 3 дня мучался..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.11.2013, 20:08
Помогаю со студенческими работами здесь

Заполнение матрицы змейкой
Дано натуральное N (1&lt;=N&lt;=10). Заполнить матрицу размера N*N целыми числами 0, 1, 2, 3, …, N^2–1 в соответствии со схемой расположения. Как...

Заполнение матрицы змейкой
Подскажите как мне изменить код #include &lt;iostream&gt; #include &lt;iomanip&gt; using namespace std; int main() { int n; ...

Заполнение матрицы змейкой
Дано натуральное N (1&lt;=N&lt;=10). Заполнить матрицу размера N*N целыми числами 0, 1, 2, 3, …, N^2–1 в соответствии со схемой расположения. ...

Заполнение матрицы змейкой
Дано натуральное N (1&lt;=N&lt;=10). Заполнить матрицу размера N*N целыми числами 0, 1, 2, 3, …, N^2–1 в соответствии со схемой расположения. ...

Заполнение матрицы змейкой по столбцам
Вывести на экран и в файл 36 25 24 13 12 1 35 26 23 14 11 2 34 27 22 15 10 3 33 28 21 16 9 4 32 29 20 17 8 5 31 30 19 18 7 6


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru