wygenerowanie i-tej kombinacji bez powtórzeń

0

Czy jest jakiś sposób oparty na nie liczeniu silni, a który to pozwala wygenerować i-tą kombinację k-elementową bez powtórzeń ze zbioru n-elementowego??? Jest taki algorytm combinadic, ale on liczy silnie n-1 elementową po k wobec czego nie wygeneruje poprawnie rozwiązania np. dla n=1000 i k=400, bo maksymalne wartości na jakich można operować to wiadomo unsigned int czyli zmienna może przyjąć max 4,2 mld.

0

poprawka największej zmiennej jakiej możesz użyć to unsigned long long int poza tym możesz wpisać w google big int ewentualnie skracaj :) tak jak robisz to na kartce 5! /4! = 5

0

unsigned long long int to 64 bity, ale np. na komputerze z platformą starszej generacji (Pentium I, II) też będzie działać??? ważne, bo nie mam jak sprawdzić!

0

Co za różnica? Przecież to i tak co najwyżej 21! ;]

0

tzn. problem już rozwiązany, ale takie z ciekawości pytanie co do tego unsigned long long int. Mam też jeszcze jedno pytanie, bo nigdzie nie pisze o tym w necie. Kiedy typ unsigned int ma 2 bajty a kiedy 4?:) Jak skompiluję na mojej maszynie program (procesor AMD dwurdzeniowy 2200MHz) to tutaj ma 4 bajty. I jak ten program przeniosę na komputer z Pentiumem jakimś 66MHz bądź tymi procesorami co przed pentiumami były to co tam też 4 bajty będą? Pomiędzy jakimi maszynami jest ta granica że tu sa 2 a tu 4? Penitum I/II, Pentium II/III, Pentium III/IV? Prosze o odpowiedź bo to jakas chyba tajemna wiedza bo nigdzie nie jest napisane.

0

Czy może w C było tak, że unsigned int raz znaczyło w zalezności od maszyny 2 bajty abo 4, a w C++ jest to na stałe ustalone i typu unsigned int ma zawsze 4 bajty oraz typu unsigned long long int zawsze występuje i ma 8 bajtów bez względu na maszynę???

0

Zależy od architektury procesora. Jeżeli procesor jest 32-bitowy, to zwykły int ma 4 bajty (*8 = 32 bity), a long long int ma dwa razy tyle.

0

Jaśniej proszę. Jak skompiluję kod na procesorze 32-bitowym i dam program na komputer, w którym jest procesor 16-bitowy to wtedy int ma 2 bajty? Czy 4, bo kompilacja była na 32-bitowym?

0

Nie. To wtedy nie zadziała.

0

Nie dam głowy, ale wydaje mi się, że standard definiuje int jako nie mniejszy od typu short. Ogólnie jest tak:

char        1 bajt
short       2 bajty
long        4 bajty
long long   8 bajtów
int         zależnie od platformy, nie mniej niż 2 bajty (16 bitów)

EDIT
Program 32-bitowy nie zadziała na platformie 16-bitowej. Architektura 16-bit nie jest kompatybilna z 32-bit. Zachowano kompatybilność wsteczną, a nie "wprzódną".

0

Ok, czyli rozumiem, że lepiej pozmieniać wszystkie zmienne w programie z unsigned int na unsigned long int oraz z int na long int. A ktoś wie może ile zajmuje typ UINT (z biblioteki windows.h) bo nie mogę tego dziadostwa znaleźć na google.

0

w zasadzie nieważne, bo raczej rzadko spotkać komputer z 16-bitowa architekturą (8086). Nawet Pentiumy 50,100 są 32-bitowe. Temat można zamknąć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1