/* 24-5-2: Generátor skupin hrubou silou */ #include #include typedef unsigned int uns; uns N; // Kódy považujeme za zápisy čísel ve dvojkové soustavě, takže jimi indexujeme. // skupina[i] říká, do které skupiny patří kód i (0, pokud ještě skupinu nemá). #define MAXN 16 uns skupina[1U << MAXN]; int main(int argc, char **argv) { N = atoi(argv[1]); int s = 0; // Počet nalezených skupin for (uns i=0; i < (1U << N); i++) if (!skupina[i]) { // Ještě není ve skupině, tak mu založíme novou a přidáme tam všechny rotace. s++; for (uns r=0; r> r) | ((i & ((1 << r) - 1)) << (N-r)); // Rotace skupina[j] = s; } // A vypíšeme kód na výstup for (int b=N-1; b>=0; b--) putchar((i & (1U << b)) ? '1' : '0'); putchar('\n'); } printf("Nalezeno %u skupin\n", s); return 0; }