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

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

27.11.2007, 12:57. Показов 221551. Ответов 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
87800 / 53121 / 249
Регистрация: 10.04.2006
Сообщений: 13,760
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
87800 / 53121 / 249
Регистрация: 10.04.2006
Сообщений: 13,760
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
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru