permutacja elementów tablicy

permutacja elementów tablicy
2S
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 11 lat
  • Postów:8
0

Cześć, napisałem krótki program generujący wszystkie permutacje zbioru liczb podanego przez użytkownika. Program zwraca dobrą liczbę permutacji tj. dla liczności zbioru n, jest n! permutacji. Problem w tym, że zamiast liczb naturalnych zwraca ujemne albo śmieci z pamięci. Nie mogę zlokalizować przecieku. Jestem początkującym programistą... Pewnie ktoś doświadczony zauważy błąd od razu ;p

Kopiuj
#include <iostream>
#include <string>
#include <list>
#include <fstream>
#include <cstddef>
#include <cstdlib>
#include <iterator>
#include <algorithm>
using namespace std;

void permutacja_(int k, int n, int tab[])
{
    if(k==1)
        {

        for(int i=0; i<n; i++)
            {
             cout << tab[i] << " ";
            }
            cout << endl;
        }
else{

        for(int i=0; i<k; i++)
        {
            //cout << k << " ";
            //cout << n << " ";
            swap(tab[i],tab[k]);
            permutacja_(k-1, n, tab);
            swap(tab[i],tab[k]);
        }
        }
}
int main()
{
    int n=0, k=0;
    int tab[10];
    cin >> n;
    k = n;
    for(int i=0; i<n; i++)
    {
        cin >> tab[i];
    }
permutacja_(k, n, tab);
    return 0;
}

Dla instancji n=2
{1,2}
powinno być
1 2
2 1
a program zwraca:
-667167374 2
1 -667167374
:(

***okeej znalazłem błąd ;p przykładowo k=2,a nie istnieje tab[2] dla tablicy dwuelementowej, ponieważ jest numerowana od 0 a nie od 1 ;p ale naradził się kolejny problem, program nie generuje wszystkich permutacji ;/

***idąc za ciosem... oczywiscie jak numerujemy od 0 no to k==0 a nie k==1 ;p teraz z kolei mam powtórki w permutacjach... dla n=3 jest 9 a nie 6... poprawiam dalej ;p

***ok, solved zamiast n w pętli powinno być k+1
przepraszam za zamieszanie, prosiłbym jednak o nie usuwanie tematu, myślę że przyda się jeszcze jakiemu beginnerowi jak ja ;p
wklejam poprawny kod:

Kopiuj
#include <iostream>
#include <string>
#include <list>
#include <fstream>
#include <cstddef>
#include <cstdlib>
#include <iterator>
#include <algorithm>
using namespace std;

void permutacja_(int k, int n, int tab[])
{
    if(k==0)
        {

        for(int i=0; i<n; i++)
            {
             //cout << n << endl;
            cout << tab[i] << " ";
            }
            cout << endl;
        }
else{
        //cout << k << endl;
        for(int i=0; i<k+1; i++)
        {
            //cout << k << " " << "k"<< endl;
            //cout << n << " ";
            //cout << tab[i] << " ";
            //cout << tab[k] <<"tab[k]" <<endl;
            swap(tab[i],tab[k]);
            permutacja_(k-1, n, tab);
            swap(tab[i],tab[k]);
        }
        }
}
int main()
{
    int n=0, k=0;
    int tab[10];
    cin >> n;
    k = n-1;
    for(int i=0; i<n; i++)
    {
        cin >> tab[i];
    }
permutacja_(k, n, tab);
    return 0;
}
edytowany 3x, ostatnio: 2seconds
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 miesiące
0
Kopiuj
#include <iostream>
#include <algorithm>
using namespace std;
 
int main()
  {
   int n=0, k=0;
   int tab[10];
   cin>>n;
   for(int i=0;i<n;++i) cin>>tab[i];
   sort(tab,tab+n);
   for(int i=0;i<n;++i) cout<<tab[i]<<' ';
   for(cout<<endl;next_permutation(tab,tab+n);cout<<endl) for(int i=0;i<n;++i) cout<<tab[i]<<' ';
   return 0;
  }

http://ideone.com/ZttUFO


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.