Перевод с 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();
}
}
}