Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
nightrage
0 / 0 / 1
Регистрация: 29.04.2015
Сообщений: 2
#1

Заполнение двумерного массива по спирали - C#

14.05.2015, 00:39. Просмотров 1143. Ответов 2
Метки нет (Все метки)

Необходимо заполнить двумерный массив по спирали. Что нужно сделать, чтобы:
1) он заполнялся чередующимися нулями и единицами;
2) назначить другую точку старта (например, правый нижний угол);
3) выбрать другое направление для заполнения (по часовой стрелке)?
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
            int N = 3, M = 3;
            int[,] A = new int[N, M];
 
 
            int row = 0, col = 0, dx = 1, dy = 0, dirChanges = 0, gran = M;
 
            for (int i = 0; i < A.Length; i++)
            {
                A[col, row] = i + 1;
                if (--gran == 0)
                {
                    gran = M * (dirChanges % 2) + N * ((dirChanges + 1) % 2) - (dirChanges / 2 - 1) - 2;
                    int temp = dx;
                    dx = -dy;
                    dy = temp;
                    dirChanges++;
                }
                col += dx;
                row += dy;
            }
 
            for (int i = 0; i < N; i++)
            {
                for (int j = 0; j < M; j++)
                {
                    Console.Write(A[i, j] + " ");
                }
                Console.WriteLine();
            }
 
 
            Console.ReadKey();
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2015, 00:39
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Заполнение двумерного массива по спирали (C#):

Заполнение любого двумерного массива по спирали
как заполнить любой двумерный массив по спирали?

Заполнение массива по спирали
Помогите, пожалуйста, с решением задачи на языке C#: Необходимо ввести с...

Заполнение квадратного массива по спирали C#
Добрый день. Как заполнить квадратный массив по спирали начиная с центра против...

Перевод c Pascal на C#: заполнение массива по спирали
Помогите, пожалуйста, с Паскаля перевести в С# Задание: uses crt; var...

Переписать программу c Pascal на С#. Заполнение массива по спирали
Необходимо переписать программу с Pascal на С#. Эта программа заполняет массив...

Заполнение двумерного массива из файла
Доброго времени суток! Прошу вас, помогите! Необходимо заполнить двумерный...

2
Psilon
Master of Orion
Эксперт .NET
5981 / 4834 / 901
Регистрация: 10.07.2011
Сообщений: 14,439
Записей в блоге: 5
Завершенные тесты: 4
14.05.2015, 11:09 #2
nightrage, проще всего заполнять массив текущим алгоритмом, а потом переворачивать его в случае старта из другой точки. Аналогично "против часовой стрелки" просто зеркалится

Добавлено через 40 секунд
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
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication48
{
    class Program
    {
        static void Main(string[] args)
        {
            int N = 3, M = 3;
            var a = CreateSnakeArrayVsClock(N, M);
 
            for (int i = 0; i < N; i++)
            {
                for (int j = 0; j < M; j++)
                {
                    Console.Write(a[i, j] + " ");
                }
                Console.WriteLine();
            }
 
 
            Console.ReadKey();
        }
 
        private static int[,] CreateSnakeArrayVsClock(int n, int m)
        {
            var arr = CreateSnakeArray(n, m);
            for (int i = 0; i < m; i++)
            {
                for (int j = 0; j < n/2; j++)
                {
                    var tmp = arr[i, j];
                    arr[i, j] = arr[i, m - j - 1];
                    arr[i, m - j - 1] = tmp;
                }
            }
            return arr;
        }
 
        private static int[,] CreateSnakeArray(int n, int m)
        {
            int[,] A = new int[n, m];
            int row = 0, col = 0, dx = 1, dy = 0, dirChanges = 0, gran = m;
 
            for (int i = 0; i < A.Length; i++)
            {
                A[col, row] = i + 1;
                if (--gran == 0)
                {
                    gran = m*(dirChanges%2) + n*((dirChanges + 1)%2) - (dirChanges/2 - 1) - 2;
                    int temp = dx;
                    dx = -dy;
                    dy = temp;
                    dirChanges++;
                }
                col += dx;
                row += dy;
            }
            return A;
        }
    }
}
1
Psilon
Master of Orion
Эксперт .NET
5981 / 4834 / 901
Регистрация: 10.07.2011
Сообщений: 14,439
Записей в блоге: 5
Завершенные тесты: 4
19.05.2015, 17:34 #3
только там не m, а n во внутреннем цикле...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2015, 17:34
Привет! Вот еще темы с решениями:

Заполнение двумерного массива из файла
Есть файл вещественных чисел для нижнетреугольной матрицы (файл содержит...

Заполнение двумерного массива из файла
Помогите, пожалуйста, новичку и не отсылайте по ссылкам!!!!перечитала много, а...

Заполнение двумерного массива по правилу
Здравствуйте, помогите решить задачку: Заполнить целочисленный массив А, не...

Заполнение двумерного массива строками
using System; class Program { static void Main(string...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru