Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Permutacija tri broja, moze li jednostavnije od ovoga?

[es] :: C/C++ programiranje :: Permutacija tri broja, moze li jednostavnije od ovoga?

[ Pregleda: 5488 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

SuperC

Član broj: 120719
Poruke: 124
*.9.14.vie.surfer.at.



Profil

icon Permutacija tri broja, moze li jednostavnije od ovoga?12.11.2006. u 13:29 - pre 211 meseci
Trazeno mi je da tri broja, recimo 123, permutiram u svim mogucim oblicima, znaci da dobijem kao rjesenje 123 132 213 231 312 321, ja sam napisao nesto, Dev ne prijavljuje gresku, no Dev jos nisam uspio podesiti kako treba te ne mogu prakticno unijeti tri broja i vidjeti kako to funkcionise, ne znam da li moze jednostavnije, no evo sta sam ja napravio:

Code:

#include <stdio.h>

void print(const int *v, const int size)
{
  if (v != 0) 
  {
    for (int i = 0; i < size; i++) 
    {
      printf("%4d", v[i] );
    }
    printf("\n");
  }
} // print


void permute(int *v, const int start, const int n)
{  
  if (start == n-1) 
  {
    print(v, n);
  }
  else {
    for (int i = start; i < n; i++) 
    {
      int tmp = v[i];
      
      v[i] = v[start];
      v[start] = tmp;
      permute(v, start+1, n);
      v[start] = v[i];
      v[i] = tmp;
    }
  }
}


main()
{
  int v[] = {1, 2, 3, 4};
  permute(v, 0, sizeof(v)/sizeof(int));
}


EDIT: X Files : Molim Vas da zbog preglednosti, kod upisujete između tag-ova predviđenih za to:

[code]
int main ( int argc, char *argv[] )
{
// ...
return 0;
}
[/code]

Tako uokviren (formatizovan) kod će se videti ovako:

Code:

int main ( int argc, char *argv[] )
{
   // ...
   return 0;
}


[Ovu poruku je menjao X Files dana 12.03.2007. u 19:17 GMT+1]
 
Odgovor na temu

SambucusELF
Marko Radojčić
student
Stara Pazova

Član broj: 79125
Poruke: 62
*.dialup.neobee.net.

ICQ: 359912898
Sajt: www.myspace.com/vilenjak


Profil

icon Re: Permutacija tri broja, moze li jednostavnije od ovoga?11.03.2007. u 16:57 - pre 207 meseci
ako sam dobro razumeo permutacije od 3 broja!

možda da probaš ovako:

Code:

#include <iostream.h>
int n,i,j,k;
int brojevi[];
int main(int argc, char* argv[])
{
cout << "Unesite koliko ima brojeva:"
cin >> (int) n;
for (i=0;i<n;i++)
{
cout << "Unesite " << i+1 << ". broj:\n"
cin >> (int) brojevi[i];
}

cout << "Permutacije su:\n";
for (i=0;i<n;i++)
for (j=i+1;j<n;j++)
for (k=j+1;k<n;k++)
cout << brojevi[i]<< brojevi[j] << brojevi[k]<<"\n";

}



ili tako nesto...
Sve se menja.
Promena je stanje koje je konstanto. ??? Ups, kako to?

http://blender-srbija.forummotion.com/
 
Odgovor na temu

NrmMyth
Ivan Maček
Split

Član broj: 63456
Poruke: 849
*.adsl.net.t-com.hr.

Sajt: www.dump.hr


Profil

icon Re: Permutacija tri broja, moze li jednostavnije od ovoga?11.03.2007. u 17:27 - pre 207 meseci
Code:
std::next_permutation()
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.paws.umds.ac.uk.

Sajt: dejan.lekic.org


+2 Profil

icon Re: Permutacija tri broja, moze li jednostavnije od ovoga?14.03.2007. u 22:23 - pre 207 meseci
SuperC, cisto sumnjam da si ti "napravio" kod iz tvog teksta, jer to je "u bajt" kopija "University of Exeter" algoritma za generisanje permutacija...
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.paws.umds.ac.uk.

Sajt: dejan.lekic.org


+2 Profil

icon Re: Permutacija tri broja, moze li jednostavnije od ovoga?14.03.2007. u 22:52 - pre 207 meseci
Pre nego dam kod, da odgovorim kratko - moze jednostavnije, ali nije efikasno resenje. Najjednostavnije resenje za generisanje permutacija je definitivno nekakvo rekurzivno resenje...

Evo jako dobrog (citaj brzog) resenja bez rekurzije:
Code:

#include <iostream>

/*
 r     n!
P  = ------- 
 n    (n-r)!
U nasem slucaju n = r = 0, tako da je broj permutacija zapravo n!.
Recimo da imamo na ulazu niz od 3 elementa {1,2,3}, broj permutacija je 3!, dakle 6.
*/
using namespace std;

void stampajNiz(unsigned int arg[], int size) {
  for (int x=0; x<size; x++)
    cout << arg[x] << " ";
  cout << endl;
} // stampajNiz()

void permutacije(int n)
{
  unsigned int a[n], p[n+1];
  register unsigned int i, j, tmp;
  // inicijalizuj nizove    
  for(i = 0; i < n; i++) { 
    a[i] = i + 1;
    p[i] = i;
  } // for
  stampajNiz(a, n);     // odstampaj inicijalni niz
  p[n] = n;
  i = 1;
  while(i < n) {
    p[i]--;
    j = i % 2 * p[i];   // ako je i neparan, onda j = p[i], inace j = 0
    tmp = a[j];
    a[j] = a[i];
    a[i] = tmp;
    i = 1;
    while (!p[i]) {
      p[i] = i;
      i++;
    } // while
    stampajNiz(a, n);
  } // while
} // permutacije()

int main()
{
  permutacije(3);
  return 0;
} // main()


Primer izlaza

dlekic@calcium ~/prj/cpp/work $ ./permutation
1 2 3
2 1 3
3 1 2
1 3 2
2 3 1
3 2 1


[Ovu poruku je menjao leka dana 15.03.2007. u 00:03 GMT+1]
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

1jedini
Dejan Milosavljevic
BG

Član broj: 102721
Poruke: 74
*.cpe.vektor.net.



Profil

icon Re: Permutacija tri broja, moze li jednostavnije od ovoga?15.03.2007. u 09:37 - pre 207 meseci
Code:

#include <iostream>
#include <iomanip>

using namespace std;

void ucitaj( int *a, int*b, int *c ) //! znam, znam, mogu i reference
 {
  cin >> *a;
  cin >> *b;
  cin >> *c;
  cin.get();
 }

void obradi( int const& a, int const& b, int const& c )
 {
  cout << a <<"; "<< b << "; " << c << endl;
 }

int main( int argc, char *argv[])
 {
  int a,b,c;
  ucitaj(&a,&b,&c);

  obradi(a,b,c);
  obradi(a,c,b);
  obradi(b,a,c);
  obradi(b,c,a);
  obradi(c,a,b);
  obradi(c,b,a);

  cin.get();
  return 0;
 }





Ovo je ujedno i najbrze resenje.
Slicno je i za 4,5,6,...

Ako je broj elemenata nepoznat u vrajt-tajmu onda je resenje ( idejno gledano ) drugacije od predhodno pomenutog.

AKA DDMM
 
Odgovor na temu

Mali Misha
Mihajlo Anđelković
NBGD

Član broj: 79396
Poruke: 379
89.190.198.*

ICQ: 195487525
Sajt: cpptea.com


+1 Profil

icon Re: Permutacija tri broja, moze li jednostavnije od ovoga?15.03.2007. u 10:23 - pre 207 meseci
Ako ćemo već u tom smeru, funkcije mogu biti inline ili makroi. Tako se štedi i (inače beznačajno) vreme za njihove pozive.
Ipak se ++uje.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Permutacija tri broja, moze li jednostavnije od ovoga?

[ Pregleda: 5488 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.