C++ - Newbie braucht, hilft zum drucken von Kombinationen von zahlen

Glaube, ich bin da:

  1. Einem Bereich von Ganzzahlen iRange (z.B. von 1 bis zu iRange) und
  2. Eine gewünschte Anzahl von Kombinationen

Möchte ich die Anzahl aller möglichen Kombinationen und drucken Sie all diese Kombinationen.

Beispiel:

Gegeben: iRange = 5 und n = 3

Dann die Anzahl der Kombinationen ist iRange! /((iRange!-n!)*n!) = 5! /(5-3)! * 3! = 10 Kombinationen, und die Ausgabe ist:

123 - 124 - 125 - 134 - 135 - 145 - 234 - 235 - 245 - 345

Anderes Beispiel:

Gegeben: iRange = 4 und n = 2

Dann die Anzahl der Kombinationen ist iRange! /((iRange!-n!)*n!) = 4! /(4-2)! * 2! = 6 Kombinationen, und die Ausgabe ist:

12 - 13 - 14 - 23 - 24 - 34

Mein Versuch so weit ist:

#include <iostream>
using namespace std;

int iRange= 0;
int iN=0;

int fact(int n)
{
    if ( n<1)
        return 1;
    else
    return fact(n-1)*n;
}

void print_combinations(int n, int iMxM)
{
    int iBigSetFact=fact(iMxM);
    int iDiffFact=fact(iMxM-n);
    int iSmallSetFact=fact(n);
    int iNoTotComb = (iBigSetFact/(iDiffFact*iSmallSetFact));
    cout<<"The number of possible combinations is: "<<iNoTotComb<<endl;
    cout<<" and these combinations are the following: "<<endl;


    int i, j, k;
    for (i = 0; i < iMxM - 1; i++)
    {
        for (j = i + 1; j < iMxM ; j++)
        {
            //for (k = j + 1; k < iMxM; k++)
                cout<<i+1<<j+1<<endl;
        }
    }
}

int main()
{
    cout<<"Please give the range (max) within which the combinations are to be found: "<<endl;
    cin>>iRange;
    cout<<"Please give the desired number of combinations: "<<endl; 
    cin>>iN;
    print_combinations(iN,iRange);
    return 0;   
}

Mein problem:
Der Teil von meinem code für das drucken der Kombinationen funktioniert nur für n = 2, iRange = 4 und ich kann es nicht Arbeit im Allgemeinen, d.h., für jede n und iRange.

  • Paar Punkte - bitte geben Sie Ihre Anfrage in der form einer Frage. Auch, denken Sie, was Sie gefragt haben. Ich glaube was du suchst ist eine permutation Algorithmus (iRange P n), die alle Kombinationen von n zahlen ausgewählt aus "iRange" Werte.
  • In deinem Beispiel-Ausgabe: 123 - 124 - 125 - 134 - 135 - 142 - 145 - 234 - 245 - 345 Sie haben 124 und 142, die aussieht wie eine permutation. Eine Kombination, die sollten Sie bekommen: 123 - 124 - 125 - 134 - 135 - 145 - 234 - 235 - 245 - 345.
  • was ich Frage ist für Hilfe/Ideen/Anleitungen zum ändern der for-Schleifen, so dass mein code funktioniert für alle Werte von n und iRange, und produzieren so eine Ausgabe wie in den Beispielen. Ich denke, dass vielleicht die for-Schleifen ersetzt werden sollte durch eine weitere rekursive Funktion, oder thansform die jetzige Funktion rekursiv ein. Aber ich kann mir nicht vorstellen base case für die reursion.
  • DeSimone Dank, den ich gerade korrigiert es.
  • Der erste Treffer für next_combination im Google ist ein anständiger Lesen: sites.google.com/site/hannuhelminen/next_combination
  • MANYYYYYYYY VIELEN DANK AN ALLE VON U!!!!!!! @aterrel & @Mike De Simone Ihre Antworten Gaben mir einen guten Einblick in den Algorithmus-design benötigt. @Alex & Harry Ihre Antworten Gaben mir schöne Lösungen zu meinem problem. @J. F. Sebastian vielen Dank, dass Sie mir Infos für weitere Lektüre. Ich bevorzuge harrys wegen der Einfachheit. Vielen Dank, alle wieder u

InformationsquelleAutor GermanNewbie | 2009-12-09
Schreibe einen Kommentar