А понятно, а то я до сих пор не могу разобраться со скриншотом... Ну хорошо, теперь его не надо грузить на сервак
Еще раз спасибо тебе, Eugie.
Генерация всех возможных подмножеств на Bornald C++ 3. 1
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Ах да... Вот что там написано:
printf("Введите количество элементов в множестве");
printf("Введите элемент номер %d ", i+1);
printf("Введите количество элементов в множестве");
printf("Введите элемент номер %d ", i+1);
Ах... Вот еще... Эта программа не генерирует пустое подмножество.
Чтобы создавалось впечатление, что пустое подмножество генерируется, нужно в самом начале записать в файл символ "0"
Чтобы создавалось впечатление, что пустое подмножество генерируется, нужно в самом начале записать в файл символ "0"
Алгоритм R.W.Gosper-а
используется для генерации последовательности подмножеств по возрастанию порядка от пустого, до всего множества.
используется для генерации последовательности подмножеств по возрастанию порядка от пустого, до всего множества.
Код: Выделить всё
#include <iostream>
#include <cmath>
using namespace std;
unsigned snoob( unsigned x )
{
unsigned smallest, ripple, ones;
smallest = x & -x;
ripple = x + smallest;
ones = x ^ ripple;
ones = (ones >> 2)/smallest;
return ripple | ones;
}
void outSet( unsigned x )
{
cout << "{";
if(!x) { cout << "}"; return; }
int num = 1; // номер бита, начиная с 1
for(;;)
{
if( x==1 ) { cout << num << "}"; return; }
if( x&1 ) cout << num << ", ";
x >>= 1;
++num;
}
}
int main()
{
unsigned N;
cout << "Input order set N = ";
cin >> N;
cout << endl;
unsigned Ord1 = unsigned(pow(2,N));
// подмножества из K элементов
for( unsigned K = 0; K <=N; ++K )
{
unsigned x = unsigned(pow(2,K))-1; // min subSet
unsigned maxSubSet = Ord1 - unsigned(pow(2,N-K));
for(;;)
{
if( x == maxSubSet ) { outSet(x); cout<< endl; break; }
outSet(x); cout << ", ";
x = snoob(x);
}
}
return 0;
}
Лёгкость, искромётность, молниеносность!!!
Как я понимаю это тоже VC++ 6.0?
Точно
Лёгкость, искромётность, молниеносность!!!
А жаль