Перебрать в цикле все возможные комбинации: вопрос оптимизации кода - C#
Формулировка задачи:
Здравствуйте! Задача следующая: есть несколько массивов. Пусть будет 5. Необходимо перебрать все возможные комбинации по 5 значений, каждое из которых выбирается из каждого массива. Вот этот код все делает как надо:
А вопрос в следующем: нельзя этот перебор сделать в 2-3 цикла? Ведь количество циклов прямо пропорционально количеству массивов...
int temp = 0, res = 0; for (int i = 0; i <= 10; i++) { for (int j = 0; j <= 10; j++) { for (int k = 0; k <= 10; k++) { for (int l = 0; l <= 10; l++) { for (int m = 0; m <= 10; m++) { for (int n = 0; n <= 10; n++) { for (int a = 0; a <= 10; a++) { for (int b = 0; b <= 10; b++) { for (int c = 0; c <= 10; c++) { for (int d = 0; d <= 10; d++) { temp = mas1[i][j]+mas2[k][l]+mas3[m][n]+mas4[a][b]+mas5[c][d]; if (temp > res) res = temp; } } } } } } } } } }
Решение задачи: «Перебрать в цикле все возможные комбинации: вопрос оптимизации кода»
textual
Листинг программы
using System; using System.Collections.Generic; namespace ConsoleApplication157 { class Program { static void Main(string[] args) { var mas1 = new int[2][]; mas1[0] = new int[] { 1, 2 }; mas1[1] = new int[] { 3, 4 }; var mas2 = new int[2][]; mas2[0] = new int[] { 5, 6 }; mas2[1] = new int[] { 7, 8 }; var arrays = new[] { mas1, mas2 }; foreach (var tuple in GenearateTuples(arrays)) { //doing somewhat with tuples } Console.ReadLine(); } private static IEnumerable<List<int>> GenearateTuples(IList<int[][]> arrays, int i = 0) { if (i < arrays.Count) { foreach (var subArr in arrays[i]) foreach (var val in subArr) foreach (var tuple in GenearateTuples(arrays, i + 1)) { tuple.Add(val); yield return tuple; } } else yield return new List<int>(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д