Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
0 / 0 / 0
Регистрация: 14.06.2016
Сообщений: 11

Заполнить двухмерный массив целыми числами от 1 до 100 по спирали

14.06.2016, 23:25. Показов 3179. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Заполнить двухмерный массив целыми числами от 1 до 100 по спирали.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.06.2016, 23:25
Ответы с готовыми решениями:

Заполнить двумерный массив целыми числами от 1 до 100 по спирали
Заполнить двумерный массив целыми числами от 1 до 100 по спирали

Заполнить двумерный массив целыми числами от 1 до 100 по спирали
Заполнить двумерный массив целыми числами от 1 до 100 по спирали Начал изучение c++. Работаю в visual c++ 6.0 Очень интересует, как...

Заполнить двумерный квадратный массив целыми числами от 1 до 100 по спирали,
Заполнить двумерный квадратный массив целыми числами от 1 до 100 по спирали, с правого крайнего угла в центр

5
44 / 41 / 44
Регистрация: 08.05.2016
Сообщений: 119
15.06.2016, 12:33
Вы не могли бы пояснить, что означает "заполнить массив по спирали"?
0
 Аватар для Lexeq
1151 / 743 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
15.06.2016, 14:22
Hares,
01 02 03 04
12 13 14 05
11 16 15 06
10 09 08 07
0
 Аватар для EveKS
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
15.06.2016, 17:58
Как-то так:
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
            Random rnd = new Random();
            int[,] arr1 = new int[rnd.Next(5,12), rnd.Next(6,13)];
 
            int k = 0, l = 0,
                n = 1, m = 1;
            int j = 0;
 
            int maxI = arr1.GetLength(0) * arr1.GetLength(1);
 
            int arrX = arr1.GetLength(1);
            int arrY = arr1.GetLength(0);
 
            for (int i = 0; i < maxI; i++)
            {
                arr1[l, k] = j;
 
                if (k < arrX - n &&
                    l < m)
                {
                    k++;
                }
                else if (k == arrX - n &&
                         l < arrY - m)
                {
                    l++;
                }
                else if (l == arrY - m &&
                         k > n - 1)
                {
                    k--;
                }
                else if (k == n - 1 && l > m - 1)
                {
                    l--;
                    if(l == m)
                    {
                        n++;
                        m++;
                    }
                }
                j++;
            }
В консольке

Code
1
2
3
4
5
6
7
8
9
   *   *   0   1   2   3   4   5   6   7   8   9
   *   *   *   *   *   *   *   *   *   *   *   *
   0   *   0   1   2   3   4   5   6   7   8   9
   1   *  29  30  31  32  33  34  35  36  37  10
   2   *  28  51  52  53  54  55  56  57  38  11
   3   *  27  50  65  66  67  68  69  58  39  12
   4   *  26  49  64  63  62  61  60  59  40  13
   5   *  25  48  47  46  45  44  43  42  41  14
   6   *  24  23  22  21  20  19  18  17  16  15
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
    *    *    0    1    2    3    4    5    6    7    8    9
    *    *    *    *    *    *    *    *    *    *    *    *
    0    *    0    1    2    3    4    5    6    7    8    9
    1    *   37   38   39   40   41   42   43   44   45   10
    2    *   36   67   68   69   70   71   72   73   46   11
    3    *   35   66   89   90   91   92   93   74   47   12
    4    *   34   65   88  103  104  105   94   75   48   13
    5    *   33   64   87  102  109  106   95   76   49   14
    6    *   32   63   86  101  108  107   96   77   50   15
    7    *   31   62   85  100   99   98   97   78   51   16
    8    *   30   61   84   83   82   81   80   79   52   17
    9    *   29   60   59   58   57   56   55   54   53   18
   10    *   28   27   26   25   24   23   22   21   20   19
Как печатал

C#
1
ArrayPrint(arr1);
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
    public static void ArrayPrint(int[,] arr)
        {
            int length = 0;
            string[,] arr1 =
                new string[arr.GetLength(0) + 2, arr.GetLength(1) + 2];
 
            for (int j = 0; j < arr.GetLength(0); j++)
                for (int i = 0; i < arr.GetLength(1); i++)
                {
                    arr1[j + 2, i + 2] = arr[j, i].ToString();
                    if (length < arr1[j + 2, i + 2].Length)
                        length = arr1[j + 2, i + 2].Length;
                }
 
            for (int j = 0; j < arr1.GetLength(1); j++)
            {
                arr1[0, j] = (j > 1) ? (j - 2).ToString() : "*";
                arr1[1, j] = "*";
            }
 
            for (int j = 0; j < arr1.GetLength(0); j++)
                for (int i = 0; i < 2; i++)
                {
                    arr1[j, i] = (i == 0 && j > 1) ? (j - 2).ToString()
                        : (j == 0 && i == 0) ? arr1[j, i] : "*";
                }
 
            length += 2;
 
            for (int j = 0; j < arr1.GetLength(0); j++)
            {
                for (int i = 0; i < arr1.GetLength(1); i++)
                {
                    arr1[j, i] = arr1[j, i].PadLeft(length, ' ');
                    Console.Write(arr1[j, i]);
                }
                Console.WriteLine();
            }
            Console.WriteLine();
        }


От 1 до 100

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
using System;
 
namespace spiral
{
    class Program
    {
        static void Main(string[] args)
        {
            Random rnd = new Random();
            int[,] arr1 = new int[10, 10];
 
            int k = 0, l = 0,
                n = 1, m = 1;
            int j = 1;
 
            int maxI = arr1.GetLength(0) * arr1.GetLength(1);
 
            int arrX = arr1.GetLength(1);
            int arrY = arr1.GetLength(0);
 
            for (int i = 0; i < maxI; i++)
            {
                arr1[l, k] = j;
 
                if (k < arrX - n &&
                    l < m)
                {
                    k++;
                }
                else if (k == arrX - n &&
                         l < arrY - m)
                {
                    l++;
                }
                else if (l == arrY - m &&
                         k > n - 1)
                {
                    k--;
                }
                else if (k == n - 1 && l > m - 1)
                {
                    l--;
                    if(l == m)
                    {
                        n++;
                        m++;
                    }
                }
                j++;
            }
 
            ArrayPrint(arr1);
 
        }
 
            public static void ArrayPrint(int[,] arr)
        {
            int length = 0;
            string[,] arr1 =
                new string[arr.GetLength(0) + 2, arr.GetLength(1) + 2];
 
            for (int j = 0; j < arr.GetLength(0); j++)
                for (int i = 0; i < arr.GetLength(1); i++)
                {
                    arr1[j + 2, i + 2] = arr[j, i].ToString();
                    if (length < arr1[j + 2, i + 2].Length)
                        length = arr1[j + 2, i + 2].Length;
                }
 
            for (int j = 0; j < arr1.GetLength(1); j++)
            {
                arr1[0, j] = (j > 1) ? (j - 2).ToString() : "*";
                arr1[1, j] = "*";
            }
 
            for (int j = 0; j < arr1.GetLength(0); j++)
                for (int i = 0; i < 2; i++)
                {
                    arr1[j, i] = (i == 0 && j > 1) ? (j - 2).ToString()
                        : (j == 0 && i == 0) ? arr1[j, i] : "*";
                }
 
            length += 2;
 
            for (int j = 0; j < arr1.GetLength(0); j++)
            {
                for (int i = 0; i < arr1.GetLength(1); i++)
                {
                    arr1[j, i] = arr1[j, i].PadLeft(length, ' ');
                    Console.Write(arr1[j, i]);
                }
                Console.WriteLine();
            }
            Console.WriteLine();
        }
    }
}
Code
1
2
3
4
5
6
7
8
9
10
11
12
    *    *    0    1    2    3    4    5    6    7    8    9
    *    *    *    *    *    *    *    *    *    *    *    *
    0    *    1    2    3    4    5    6    7    8    9   10
    1    *   36   37   38   39   40   41   42   43   44   11
    2    *   35   64   65   66   67   68   69   70   45   12
    3    *   34   63   84   85   86   87   88   71   46   13
    4    *   33   62   83   96   97   98   89   72   47   14
    5    *   32   61   82   95  100   99   90   73   48   15
    6    *   31   60   81   94   93   92   91   74   49   16
    7    *   30   59   80   79   78   77   76   75   50   17
    8    *   29   58   57   56   55   54   53   52   51   18
    9    *   28   27   26   25   24   23   22   21   20   19
0
 Аватар для EveKS
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
15.06.2016, 21:20
Я тут уже лисопед изобрел, а оказывается можно проще =).

Самый быстрый:
https://www.cyberforum.ru/post7585556.html

Долгоедущий лисопед
Немного поэкспериментировал с Tuple, вышло:

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
            int k = 0, l = 0,
                n = 1, m = 1;
            int j = 0;
 
            Tuple<int, int, int, int> a = Tuple.Create(0, 0, 1, 1);
 
            for (int i = 0; i < maxI; i++)
            {
                a = (k < arrX - n && l < m)
                    ? Tuple.Create(k + 1, l, m, n) : (k == arrX - n && l < arrY - m)
                    ? Tuple.Create(k, l + 1, m, n) : (l == arrY - m && k > n - 1)
                    ? Tuple.Create(k - 1, l, m, n) : (k == n - 1 && l == m)
                    ? Tuple.Create(k + 1, l, m + 1, n + 1) : (k == n - 1 && l > m - 1)
                    ? Tuple.Create(k, l - 1, m, n) : Tuple.Create(k, l, m, n);
 
 
                k = a.Item1;
                l = a.Item2;
                m = a.Item3;
                n = a.Item4;
 
                j++;
                arr1[l, k] = j;
            }
            }
Выполняется в 2, 2.5 раза дольше, на массивах до 1000*1000 не особо заметно, правда.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.06.2016, 21:20
Помогаю со студенческими работами здесь

Заполнить двухмерный массив размера N*M случайными целыми числами
Помогите решить задачу: Заполнить двухмерный массив размера N*M случайными целыми числами, диапазон изменения которых вводится с...

Заполнить двухмерный массив n*m элементов целыми числами , лежащим в диапозоне от a до b
Заполнить двухмерный массив n*m элементов целыми числами , лежащим в диапозоне от a до b. Найти и вывести сумму каждого нечетного столбца....

Заполнить массив из 100 элементов случайными целыми числами в диапазоне от 1 до 100
Мне очень нужна помощь, надеюсь откликнетесь... помогите написать, пожалуйста! 1. Заполнить массив из 100 элементов случайными целыми...

Массив В(20) заполнить целыми случайными числами из диапазона от -100 до 100
Заранее спасибо. Массив В(20) заполнить целыми случайными числами из диапазона от -100 до 100. Найти максимальный МАХ элемент среди...

Заполнить массив от -100 до 100 случайными целыми числами
Нужно заполнить массив от -100 до 100 случайными целыми числами. размер массива ввести с клавиатуры Найти первые три наиболее...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru