Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/165: Рейтинг темы: голосов - 165, средняя оценка - 4.67
 Аватар для CyberIslam
21 / 14 / 5
Регистрация: 21.02.2013
Сообщений: 713

Всевозможные перестановки элементов массива

30.04.2016, 02:22. Показов 32881. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравия желаю! С C# не очень хорошо знаком, и требуется вот алгоритм: вывести на экран всевозможные перестановки элементов данного массива. Ну примерно так: 12345, 12354, 12435, 12453, ....., 54321. Если получится, опишите пожалуйста его в комментариях детально
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.04.2016, 02:22
Ответы с готовыми решениями:

напишите пожалуйста с рекурсией нужно получить всевозможные перестановки элементов от 1 до 7
С помощью рекурсии получить всевозможные перестановки элементов от 1 до 7, основные моменты опишите пожалуйста.

Перестановки элементов массива
Дан массив. Поменять местами: а) второй и пятый элементы; б) т-к и n-й элементы.

Перестановки элементов массива с размерностью N без повторений
Просмотрел не мало тем, но везде или слишком мудрено или не совсем то, что нужно. В общем мне нужен алгоритм (метод), который будет...

21
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
30.04.2016, 03:42
CyberIslam, можно так:
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
using System;
using System.Collections.Generic;
 
namespace ConsoleApplication85
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] arr = new int[] { 1,2,3,4};
            ShowAllCombinations(arr);
            Console.Read();
        }
        public static void ShowAllCombinations<T>(IList<T> arr,string current = "")
        {
            if (arr.Count == 0) //если все элементы использованы, выводим на консоль получившуюся строку и возвращаемся
            {
                Console.WriteLine(current);
                return;
            }
            for(int i=0;i<arr.Count;i++) //в цикле для каждого элемента прибавляем его к итоговой строке, создаем новый список из оставшихся элементов, и вызываем эту же функцию рекурсивно с новыми параметрами.
            {
                List<T> lst = new List<T>(arr);
                lst.RemoveAt(i);
                ShowAllCombinations(lst, current + arr[i].ToString());
            }
        }
    }
}
2
1617 / 1182 / 553
Регистрация: 08.01.2012
Сообщений: 4,561
30.04.2016, 04:02
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
    class Program
    {
        static void Main(string[] args)
        {
            int l = 5;
            int[] a = new int[l];
            set(a, 0, l);
            Console.ReadKey(true);
        }
        static void set(int[] a, int n, int l)
        {
            for (int i = 0; i < l; i++)
            {
                int j;
                for (j = 0; j < n; j++)
                    if (a[j] == i + 1) break;
                if (j == n)
                {
                    a[n] = i + 1;
                    if (n < l - 1) set(a, n + 1, l);
                    else
                    {
                        for (int k = 0; k < l; k++) Console.Write(a[k]);
                        Console.WriteLine();
                    }
                }
            }
        }
    }
1
 Аватар для CyberIslam
21 / 14 / 5
Регистрация: 21.02.2013
Сообщений: 713
30.04.2016, 11:10  [ТС]
Бдагодарю Вас, EvilFromHell! Я вот со списками не очень знаком, как я говорил я слабо знаю C#. Поэтому, простым языком расскажите, пожалуйста, на Вашем примере, что такое буква T в угловых скобках (<T>). Я просто привык видеть там целочисленные или строковые типы данных, а в крайнем случае, слово "Dynamic" который, допускает наличие разных типов данных

Добавлено через 2 минуты
MansMI, спасибо Вам тоже, объясните пожалуйста смысл слова "set" в условном операторе и его параметры

Добавлено через 1 минуту
MansMI, а в каком месте заполняется Ваш массив?))

Добавлено через 49 секунд
Господа, дайте пожалуйста подробное описание ваших алгоритмов, я же должен сохранить их на будущее
0
1617 / 1182 / 553
Регистрация: 08.01.2012
Сообщений: 4,561
30.04.2016, 11:10
это рекурсия к следующему элементу массива
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
30.04.2016, 12:10
Цитата Сообщение от CyberIslam Посмотреть сообщение
что такое буква T в угловых скобках (<T>)
Почитайте про Generics. T-это произвольный тип. Вдруг вы захотите вместо массива чисел подать массив строк, к примеру, или каких-то своих объектов? Для данного метода не будет никакой разницы, ведь преобразовать к строке можно любой объект при помощи метода ToString().
0
 Аватар для CyberIslam
21 / 14 / 5
Регистрация: 21.02.2013
Сообщений: 713
30.04.2016, 14:36  [ТС]
IList что такое?
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
30.04.2016, 14:40
CyberIslam, интерфейс. Можно подавать любую коллекцию, которая реализует этот интерфейс. Массив, список и тд.
0
 Аватар для CyberIslam
21 / 14 / 5
Регистрация: 21.02.2013
Сообщений: 713
30.04.2016, 14:45  [ТС]
Еще одно новое понятие....(( Интерфейс
0
Заблокирован
30.04.2016, 15:51
Цитата Сообщение от CyberIslam Посмотреть сообщение
Еще одно новое понятие....(( Интерфейс
CyberIslam, Литература по C# для начинающих и не только
0
 Аватар для CyberIslam
21 / 14 / 5
Регистрация: 21.02.2013
Сообщений: 713
02.05.2016, 22:34  [ТС]
EvilFromHell, мне нужно добавить в
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static void ShowAllCombinations<T>(IList<T> arr,string current = "")
        {
            if (arr.Count == 0) //если все элементы использованы, выводим на консоль получившуюся строку и возвращаемся
            {
                Console.WriteLine(current);
                return;
            }
            for(int i=0;i<arr.Count;i++) //в цикле для каждого элемента прибавляем его к итоговой строке, создаем новый список из оставшихся элементов, и вызываем эту же функцию рекурсивно с новыми параметрами.
            {
                List<T> lst = new List<T>(arr);
                lst.RemoveAt(i);
                ShowAllCombinations(lst, current + arr[i].ToString());
            }
        }
еще одну локальную переменную, одномерный массив, и его заполнить всеми получившимися вариантами. Это очень легко я помню, но пожалуйста, подскажите как, я вспомнить не могу
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
02.05.2016, 23:00
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        public static List<string> ShowAllCombinations<T>(IList<T> arr, List<string> list = null, string current = "")
        {
            if (list == null) list = new List<string>();
            if (arr.Count == 0) //если все элементы использованы, выводим на консоль получившуюся строку и возвращаемся
            {
                list.Add(current);
                return list;
            }
            for (int i = 0; i < arr.Count; i++) //в цикле для каждого элемента прибавляем его к итоговой строке, создаем новый список из оставшихся элементов, и вызываем эту же функцию рекурсивно с новыми параметрами.
            {
                List<T> lst = new List<T>(arr);
                lst.RemoveAt(i);
                ShowAllCombinations(lst, list, current + arr[i].ToString());
            }
            return list;
        }
Ну так, например.
0
 Аватар для CyberIslam
21 / 14 / 5
Регистрация: 21.02.2013
Сообщений: 713
02.05.2016, 23:17  [ТС]
так ведь это получается как список.. неужели не получится сделать как целочисленный массив?

Добавлено через 2 минуты
Если я вызову потом этот метод как
C#
1
ShowAllCombinations(arr, arr2)
он заполнит arr2 тем что мне нужно?))))
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
02.05.2016, 23:19
CyberIslam, не понимаю, чего вы хотите. Как, по-вашему, должны выглядеть получаемые данные? Какой еще целочисленный массив?
Цитата Сообщение от CyberIslam Посмотреть сообщение
Если я вызову потом этот метод как
Что бы вы ни хотели-точно нет.
0
 Аватар для CyberIslam
21 / 14 / 5
Регистрация: 21.02.2013
Сообщений: 713
02.05.2016, 23:35  [ТС]
В общем так. ShowAllCombinations когда вызывается в Main с параметром arr, он все элементы массива arr выводит на экран, в самых разных перестановках. А мне нужно не в одномерный, как я по ошибке написал, а в двумерный целочисленный массив сохранить все эти числа

Добавлено через 1 минуту
пусть он называется arr2, и ShowAllCombinations должен вызываться так:
C#
1
ShowAllCombinations (arr, arr2)
из элементов одномерного массива arr получаются разные комбинации и построчно сохраняются в arr2
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
02.05.2016, 23:42
CyberIslam, все равно не понятно, какой должен быть результат. Объясните подробно, с каких делов массив двумерный и по какому принципу надо подбирать комбинации.
0
 Аватар для CyberIslam
21 / 14 / 5
Регистрация: 21.02.2013
Сообщений: 713
03.05.2016, 00:20  [ТС]
Комбинации подобрались правильно. вывод тоже правильный: на черный экран выводятся всевозможные комбинации заданного как входной параметр для ShowAllCombinations одномерного массива. Теперь, я бы хотел чтобы ShowAllCombinations не выводил эти строки на экран, а образовал бы из них двумерный массив, у которого вот такие строки:
1 2 3 4
1 2 4 3
1 3 2 4
1 3 4 2
2 1 3 4
2 1 4 3
.........
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
03.05.2016, 00:43
Лучший ответ Сообщение было отмечено CyberIslam как решение

Решение

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
using System;
using System.Collections.Generic;
 
namespace ConsoleApplication85
{
    class Program
    {
        static void Main(string[] args)
        {
            object[] arr = new object[] { 1,2,3,"z", "FFF"};
            var result = ShowAllCombinations(arr);
            foreach(List<object> lst in result)
            {
                foreach (object obj in lst)
                {
                    Console.Write(obj + " ");
                }
                Console.WriteLine();
            }
            Console.Read();
        }
        public static List<List<T>> ShowAllCombinations<T>(IList<T> arr, List<List<T>> list = null, List<T> current = null)
        {
            if (list == null) list = new List<List<T>>();
            if (current == null) current = new List<T>();
            if (arr.Count == 0) //если все элементы использованы, выводим на консоль получившуюся строку и возвращаемся
            {
                list.Add(current);
                return list;
            }
            for (int i = 0; i < arr.Count; i++) //в цикле для каждого элемента прибавляем его к итоговой строке, создаем новый список из оставшихся элементов, и вызываем эту же функцию рекурсивно с новыми параметрами.
            {
                List<T> lst = new List<T>(arr);
                lst.RemoveAt(i);
                var newlst = new List<T>(current);
                newlst.Add(arr[i]);
                ShowAllCombinations(lst, list, newlst);
            }
            return list;
        }
    }
}
Пожалуйста.
1
 Аватар для CyberIslam
21 / 14 / 5
Регистрация: 21.02.2013
Сообщений: 713
03.05.2016, 00:55  [ТС]
шикарный пример, только массив мне нужен был целочисленный))) чтобы я мог его элементы циклически увеличивать как в арифметической прогрессии)))
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
03.05.2016, 00:56
CyberIslam, ну сделайте целочисленный, какая разница. Метод же универсальный, с произвольным типом работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.05.2016, 00:56
Помогаю со студенческими работами здесь

Получить всевозможные перестановки элементов массива
Дан массив String ... Получить всевозможные перестановки элементов массива. Алгоритм реализовать именно на джава.

Построить последовательность и всевозможные перестановки
Здравствуйте. Помогите пожалуйста вот с такой программой... в С++ практически ничего не понимаю...только самые базовые основы... буду очень...

Рекурсия: напечатать всевозможные перестановки заданных чисел
Тему рекурсия понимаю понимаю, а вот сделать это задание вообще не получается:( : Дано n различных натуральных чисел. Напечатайте...

Сгенерировать всевозможные перестановки N чисел без повторений
Условие задачи: Сгенерировать всевозможные перестановки N чисел без повторений. (Использовать рекурсию, функции и массивы нельзя, выполнять...

Не могу найти ошибку в коде, генерирующего всевозможные перестановки
Всем привет! Условие задачи: задано множество, состоящие из натуральных чисел от 1 до n с шагом 1. Например: {1, 2, 3, 4, 5}. Получить...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru