Перебрать в цикле все возможные комбинации: вопрос оптимизации кода - 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>();
}
}
}