Mara
Новичок
|
дали задачку - дописать код. раз 5 прочло но что-то не доходит в чем суть-то и что нужно, как подступиться. стыдно. наверно совсем тупое вот оно: class Program { static void Main(string[] args) { // Для всех операций создаём // генератор случайных чисел Random RG = new Random(); // Определяем нижний и верхний предел для // генерации случайных числе методом // Random.Next (int Low, int High), // причём нижний предел включается, // верхний - не включается в диапазон const int LowInclusiveLimit = 1; const int HighExclusiveLimit = 10; do { const int ArrLen = 4; // Длина массива // Создаём неинициализированный массив // (встроенный класс коллекции Array) int[] A = new int[ArrLen]; // Заполняем массив случайными значениями for (int i = 0; i < A.Length; i++) A = RG.Next(LowInclusiveLimit, HighExclusiveLimit); // Сортировка по возрастанию с помощью встроенного // статического метода класса Array Array.Sort(A); // Выводим отсортированный массив на консоль foreach (int x in A) Console.Write(x + " "); Console.WriteLine(); ArraySubSets ASS = new ArraySubSets(A); do { int[] SubSet = ASS.GetNextSubSet(); if (SubSet == null) break; foreach (int x in SubSet) Console.Write(x + " "); Console.WriteLine(); } while (true); // Ожидаем нажатия ENTER на клавиатуре Console.ReadLine(); // Чистим консоль Console.Clear(); } while (true); } } //------------------------------------------------------- class ArraySubSets // Класс для нахождения всех подмножесств элементов // массива целых чисел. Для массива длиной N число его // подмножеств 2 в степени N минус 1 (пустое множество // не включается). //------------------------------------------------------- { // Ссылка на массив, подмножества // элементов которого будем исследовать protected int[] SrcArrRef; // Массив флагов присутствия элемента в // подмножестве. Всего комбинаций возможно // 2 в степени SrcArrRef.Length // (начальная комбинация - все флаги нулевые) protected bool[] PresenceFlag; public ArraySubSets(int[] SrcArr) { InitForArray(SrcArr); } public void InitForArray(int[] SrcArr) // Метод инициализации объекта для // заданного подмножества { // Сохраняем ссылку на массив SrcArrRef = SrcArr; // При созлании массив флагов присутствия\ // инициализируется значенияии false PresenceFlag = new bool[SrcArr.Length]; } public int[] GetNextSubSet() // Возврашает массив, являющийся следующим // подмножеством элементов исходного массива { InitPresenceFlagForNextSubSet(); int i, j, SubSetLength; // Реализовать определение количества элементов // в новом подмножестве SubSetLength // ... SubSetLength = 0; // данная строка // исключительно чтобы компилировалось // Если все флаги присутствия нулевые, // то возвращаем пустую ссылку (null) if (SubSetLength == 0) return null; // Создаём новое подмножество int[] NewSubSet = new int[SubSetLength]; // Заполнение подмножества // ... // Возвращаем подмножество return NewSubSet; } protected void InitPresenceFlagForNextSubSet() { int i; // При получении следующей комбинации // флагов присутствия можно пользоваться // аналогией прибавления единицы к двоичному // числу, нужно организовать "перелив" единицы // при переполнеии. Примеры // 1 + 0 = 1 // 1 + 1 = 10 // 1 + 10 = 11 // 1 + 11 = 100 // 1 + 1001 = 1010 // 1 + 1111 = 10000 // 1 + 10110 = 10111 // 1 + 10111 = 11000 for (i = 0; i < PresenceFlag.Length; i++) { //... } } }
|