Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Vectoren-Permutationen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
04.06.2004, 16:53 Uhr
~matthias
Gast


Hallo,
ich habe ein Programm geschrieben, dass mir Permutationen von einer Zahlenfolge ausgibt, welche ich selbst eingeben muss! Probierts bitte mal aus, es dürfte kein Fheler drin sein! Wenn ihr "a", "b", "c", "d" und "e" eingebt, werden diese in die zu permutierenden Vectoren umgewandelt!
Folgender Quelltext ist nur ein Ausschnitt, das eigentliche Programm ist viel komplexter!

C++:
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
    int y=0;
    char b[5];

    do
    {
        cout<<"Buchstabe: ";
        cin>>b[y];
        y++;
    }
    while(y<5);

    vector<int> array;
    vector<int>::iterator it;
  
    for(int a=0;a<5;a++)
    {
        if(b[a]=='a')array.push_back(9);
        if(b[a]=='b')array.push_back(3);
        if(b[a]=='c')array.push_back(14);
        if(b[a]=='d')array.push_back(1);
        if(b[a]=='e')array.push_back(16);        
    }

    sort(array.begin(), array.end());
  
    for(it = array.begin(); it != array.end(); ++it)
    {
      cout << *it;
    }
    cout<<"\n";
    while(next_permutation( array.begin(), array.end() ))
    {
        for(it = array.begin(); it != array.end(); ++it)
        {
            cout << *it;
        }
        cout<<"\n";
    }

    return 0;
}


Jetzt habe ich also die Permutationen aus den Vectoren begildet! Und jetzt folgt mein Problem:
Ich muss Bedingungen für die Permutationen stellen!! Beispiel:
"Gebe die Permutation nur aus, wenn die Nr. "3" und die Nr. "14" nicht nebeneinander stehen" - die Bedingung muss ich in Quelltext umwandeln! Aber geht das überhaupt mit den Vectoren??? Wenn ja, wie?? Bitte helft mir, das ich echt wichtig!

Gruß
Matthias
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
04.06.2004, 19:14 Uhr
typecast
aka loddab
(Operator)


Ich weiß zwar nicht was das soll, aber du musst das von Hand machen:

C++:
// ungetestet
bool nichtAusgeben = false;
for (unsigned i = 0; i != arry.size() - 1; ++i){
  if (v[ i ] == 3 && v[i+1] == 14)
    nichtAusgeben = true;
}



Und schon weißt du, ob der Vektor ausgeben werden soll oder nicht
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
04.06.2004, 20:45 Uhr
~matthias
Gast


@typecast:

Ich weiß, dass man sich hier fragen muss, für was man so ein Programm braucht, aber es ist wirklich wichtig!
Dein Vorschlag hat übrigens bestens funktioniert! Danke

Aber vielleicht kannst du mir noch sagen, wie so eine Ausgabe verhindert wird:


Code:
1391614

1316914
1316149

1931614

1914163


1149316
1149163


Also damit ich keine Lücken in der Ausgabe habe!! (Alle Bedingungen, die true bzw. false sind, werden ja ausgeblendet!)

Gruß
Matthias
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
07.06.2004, 07:48 Uhr
typecast
aka loddab
(Operator)


Du kannst ein Newline auch direkt in die erste cout-Anweisung packen:

C++:
  cout << *it << endl;
  // oder
  cout << *it << '\n';



Dann wird auch kein Newline ausgegeben, wenn du keine Zahl ausschreibst.
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: