0 / 0 / 0
Регистрация: 09.11.2007
Сообщений: 7

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

27.11.2007, 12:57. Показов 219608. Ответов 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
87391 / 52967 / 249
Регистрация: 10.04.2006
Сообщений: 13,707
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
87391 / 52967 / 249
Регистрация: 10.04.2006
Сообщений: 13,707
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Unity 4D
GameUnited 13.06.2025
Четырехмерное пространство. . . Звучит как что-то из научной фантастики, правда? Однако для меня, как разработчика со стажем в игровой индустрии, четвертое измерение давно перестало быть абстракцией из. . .
SSE (Server-Sent Events) в ASP.NET Core и .NET 10
UnmanagedCoder 13.06.2025
Кажется, Microsoft снова подкинула нам интересную фичу в новой версии фреймворка. Работая с превью . NET 10, я наткнулся на нативную поддержку Server-Sent Events (SSE) в ASP. NET Core Minimal APIs. Эта. . .
С днём независимости России!
Hrethgir 13.06.2025
Решил побеседовать, с утра праздничного дня, с LM о завоеваниях. То что она написала о народе, представителем которого я являюсь сам сначала возмутило меня, но дальше только смешило. Это чисто. . .
Лето вокруг.
kumehtar 13.06.2025
Лето вокруг. Наполненное бурями и ураганами событий. На фоне магии Жизни, священной и вечной, неумелой рукой человека рисуется панорама душевного непокоя. Странные серые краски проникают и. . .
Популярные LM модели ориентированы на увеличение затрат ресурсов пользователями сгенерированного кода (грязь -заслуги чистоплюев).
Hrethgir 12.06.2025
Вообще обратил внимание, что они генерируют код (впрочем так-же ориентированы разработчики чипов даже), чтобы пользователь их использующий уходил в тот или иной убыток. Это достаточно опытные модели,. . .
Топ10 библиотек C для квантовых вычислений
bytestream 12.06.2025
Квантовые вычисления - это та область, где теория встречается с практикой на границе наших знаний о физике. Пока большая часть шума вокруг квантовых компьютеров крутится вокруг языков высокого уровня. . .
Dispose и Finalize в C#
stackOverflow 12.06.2025
Работая с C# больше десяти лет, я снова и снова наблюдаю одну и ту же историю: разработчики наивно полагаются на сборщик мусора, как на волшебную палочку, которая решит все проблемы с памятью. Да,. . .
Повышаем производительность игры на Unity 6 с GPU Resident Drawer
GameUnited 11.06.2025
Недавно копался в новых фичах Unity 6 и наткнулся на GPU Resident Drawer - штуку, которая заставила меня присвистнуть от удивления. По сути, это внутренний механизм рендеринга, который автоматически. . .
Множества в Python
py-thonny 11.06.2025
В Python существует множество структур данных, но иногда я сталкиваюсь с задачами, где ни списки, ни словари не дают оптимального решения. Часто это происходит, когда мне нужно быстро проверять. . .
Работа с ccache/sccache в рамках C++
Loafer 11.06.2025
Утилиты ccache и sccache занимаются тем, что кешируют промежуточные результаты компиляции, таким образом ускоряя последующие компиляции проекта. Это означает, что если проект будет компилироваться. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru