Witam,
Dostałem zadanie aby wygenerować plik tekstowy, który zawiera wszystkie k-elementowe podzbiory zbioru {1,...,n} w porządku leksykograficznym.
mam następujący pseudokod do zamiany na kod w C++, prezentuje on się następująco:
begin
for i:=1 to k do A[i] := i; (*pierwszy pozdbiór*)
p:=k;
while p>=1 do
begin write (A[1],...,A[k]);
if A[k] = n then p:=p-1; else p:=k;
if p>=1 then
for i:=k downto p do A[i] := A[p] + i - p + 1;
end
end
Zrobiłem coś takiego, niestety nie działa tak jak powinien. (zapis do pliku pominięty)
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int n, k;
cin >> n;
do
{
cin >> k;
} while (k > n);
int *tab = new int[k];
int p = k;
for (int i = 1; i <= k; i++)
{
tab[i - 1] = i;
cout << tab[i - 1] << endl;
}
do
{
cout << tab[k-1];
if (tab[k-1] == n)
{
p = p - 1;
}
else
{
p = k;
}
if (p >= 1)
{
for (int i = k; k>p; i--)
{
tab[i-1] = tab[p-1] + i - p + 1;
}
}
} while (p >= 1);
getchar();
getchar();
return 0;
}