Комбинаторика - C#
Формулировка задачи:
Здравствуйте. Помогите решить задачу
Перечислить все способы выбора k чисел из множества 1..N. Повторения не допускаются, т.е. способ выбора должен отличаться по составу, а не по порядку следования.
Решение задачи: «Комбинаторика»
textual
Листинг программы
private static void Main(string[] args) { var arr = new[] { 45, 12, 16, 17, 34 }; int k = 3; var a = new int[k]; Console.WriteLine("Кол-во сочетаний: {0}", C(arr.Length, k)); Console.Write("Подмножество {0}: ", 1); for (int i = 0; i < k; ++i) { a[i] = i; Console.Write(arr[i] + " "); } Console.WriteLine(); int t = 1; while (NextCombination(a, arr.Length - 1)) { Console.Write("Подмножество {0}: ", ++t); for (int i = 0; i < k; ++i) Console.Write(arr[a[i]] + " "); Console.WriteLine(); } Console.ReadLine(); } private static int C(int n, int k) { if (n < k || n < 1 || k < 1) return 0; if (n == k) return 1; if (k == 1) return n; return C(n - 1, k - 1) + C(n - 1, k); } private static bool NextCombination(int[] a, int n) { int k = a.Length; for (int i = k - 1; i >= 0; --i) if (a[i] < n - k + i + 1) { ++a[i]; for (int j = i + 1; j < k; ++j) a[j] = a[j - 1] + 1; return true; } return false; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д