Új hozzászólás Aktív témák

  • kovisoft

    őstag

    válasz pmonitor #15586 üzenetére

    Említetted az ismétléses permutációt, az előző kódomat egy kis módosítással alkalmassá tehetjük ezeknek az előállítására is. Csupán ki kell cserélni a < és > jeleket <= ill. >=-re, hogy a megegyező elemeket is átugorják a ciklusok. Valamint a tömb inicializálásakor fel kell sorolni ismétlésekkel együtt növekvő sorrendben az elemeket (ha mindegyik elem különböző, akkor visszakapjuk az ismétlés nélküli permutációt). Valahogy így:

      int a[] = {1,1,2,2,2,3};
        int n=6;
    ...
            // megkeressuk, hol kezdodik az utolso monoton csokkeno reszsorozat
            for (i=n-2; i>=0 && a[i]>=a[i+1]; i--);
    ...
            // a csokkeno reszsorozat elotti elemet ki kell cserelnunk a reszsorozatban nagysag szerint rakovetkezovel
            for (j=n-1; a[j]<=a[i]; j--);
    ...

    Ennek a sebességét sem teszteltem, nem tudom, hogyan viszonyul más módszerekhez.

Új hozzászólás Aktív témák