Перевод с C++. Алгоритм генерирующий все подмножества с повторениями - C#
Формулировка задачи:
это нерекурсивный алгоритм генерирующий все подмножества с повторениями
#include <iostream> #include <clocale> using namespace std; int main() { setlocale(LC_ALL, ""); const int N = 6; int A[N]; // имеем множество A {1, ... N} for (int i = 0; i < N; i++) A[i] = i + 1; // заполняем множество int a[N] = {0}; // надо ли включать элемент множества int counter = 0; // счетчик while (a[0] != 2) // пока не прошли все элементы { for (int i = 0; i < N; i++) // выводим подмножество if(a[i]) // если нужно печатать cout << A[i] << ' '; cout << endl; a[N-1]++; // увеличиваем последний разряд for (int i = N - 1; i > 0; i--) // если нужен сдвиг if(a[i] == 2) // увеличиваем след. разряд { a[i-1]++; a[i] = 0; } counter++; // увеличиваем счетчик на один } cout << "Всего подмножеств: " << counter << endl; }
Решение задачи: «Перевод с C++. Алгоритм генерирующий все подмножества с повторениями»
textual
Листинг программы
using System; namespace ConsoleApplication5 { class Program { static void Main(string[] args) { const int n = 6; int[] A = new int[n]; // имеем множество A {1, ... N} for (int i = 0; i < n; i++) A[i] = i + 1; // заполняем множество int[] a = new int[n]; // надо ли включать элемент множества int counter = 0; // счетчик while (a[0] != 2) // пока не прошли все элементы { for (int i = 0; i < n; i++) // выводим подмножество if (a[i] != 0) // если нужно печатать Console.Write("{0} ", A[i]); Console.WriteLine(); a[n - 1]++; // увеличиваем последний разряд for (int i = n - 1; i > 0; i--) // если нужен сдвиг if (a[i] == 2) // увеличиваем след. разряд { a[i - 1]++; a[i] = 0; } counter++; // увеличиваем счетчик на один } Console.WriteLine("Всего подмножеств: {0}", counter); Console.ReadLine(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д