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

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

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

Новые блоги и статьи
Angular vs Svelte - что лучше?
Reangularity 09.07.2025
Сегодня рынок разделился на несколько четких категорий: тяжеловесы корпоративного уровня (Angular), гибкие универсалы (React), прогрессивные решения (Vue) и новая волна компилируемых фреймворков. . .
Code First и Database First в Entity Framework
UnmanagedCoder 09.07.2025
Entity Framework дает нам свободу выбора, предлагая как Code First, так и Database First подходы. Но эта свобода порождает вечный вопрос — какой подход выбрать? Entity Framework — это. . .
Как использовать Bluetooth-модуль HC-05 с Arduino
Wired 08.07.2025
Bluetooth - это технология, созданная чтобы заменить кабельные соединения. Обычно ее используют для связи небольших устройств: мобильных телефонов, ноутбуков, наушников и т. д. Работает она на частоте. . .
Руководство по структурам данных Python
AI_Generated 08.07.2025
Я отчетливо помню свои первые серьезные проекты на Python - я писал код, он работал, заказчики были относительно довольны. Но однажды мой наставник, взглянув на мою реализацию поиска по огромному. . .
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах
Programma_Boinc 08.07.2025
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах Опубликовано: 07. 07. 2025 Рубрика: Uncategorized Автор: AlexA Статья размещается на сайте с разрешения. . .
Раскрываем внутренние механики Android с помощью контекста и манифеста
mobDevWorks 07.07.2025
Каждый Android-разработчик сталкивается с Context и манифестом буквально в первый день работы. Но много ли мы задумываемся о том, что скрывается за этими обыденными элементами? Я, честно говоря,. . .
API на базе FastAPI с Python за пару минут
AI_Generated 07.07.2025
FastAPI - это относительно молодой фреймворк для создания веб-API, который за короткое время заработал бешеную популярность в Python-сообществе. И не зря. Я помню, как впервые запустил приложение на. . .
Основы WebGL. Раскрашивание вершин с помощью VBO
8Observer8 05.07.2025
На русском https:/ / vkvideo. ru/ video-231374465_456239020 На английском https:/ / www. youtube. com/ watch?v=oskqtCrWns0 Исходники примера:
Мониторинг микросервисов с OpenTelemetry в Kubernetes
Mr. Docker 04.07.2025
Проблема наблюдаемости (observability) в Kubernetes - это не просто вопрос сбора логов или метрик. Это целый комплекс вызовов, которые возникают из-за самой природы контейнеризации и оркестрации. К. . .
Проблемы с Kotlin и Wasm при создании игры
GameUnited 03.07.2025
В современном мире разработки игр выбор технологии - это зачастую балансирование между удобством разработки, переносимостью и производительностью. Когда я решил создать свою первую веб-игру, мой. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru