Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    algoritmo combinazione binaria

    ciao a tutti,
    ho provato a cercare un algoritmo che mi permetesse di ottenere da 4 numeri la seguente combinazione.

    I numeri sono es: 3, 6, 21, 8
    i risultati:
    3, 6, 9, 21, 24, 27, 30, 8, 11, 14, ....
    in pratica si tratta di selezionare i numeri sopra in modo binario per provare tutte le combinazioni posibili.
    Drovebbe essere un algoritmo conosciuto ma non riesco a trovarlo.
    qualcuno mi puo aitare?

  2. #2
    Fai un ciclo con numeri da 1 a 2^4-1; ad ogni iterazione, fai un and con ogni bit (da 0 a 3) e, se è acceso, somma il numero di posizione corrispondente; otterrai così tutte le combinazioni richieste; in C++:
    codice:
    int elems[]={3, 6, 21, 8};
    size_t numelems=sizeof(elems)/sizeof(*elems);
    for(int i=1; i<(1<<numelems); i++)
    {
        int result=0;
        for(int j=0; j<numelems; j++)
            result+=(i & (1<<j))?elems[j]:0;
        cout<<result<<'\n';
    }
    http://ideone.com/0EXYKb

    (nota che, a meno che i vari numeri utilizzati non siano tutti potenze diverse dello stesso numero, non è garantito che tutte le combinazioni diano risultati diversi)
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    fantastico e' quello che stavo cercando.
    interessante la soluzione con l'and tra 2 numeri interi.
    grazie

  4. #4
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.