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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.6 из 5
Похожие ответы