Pikkuapua

C-alkaja

Mitenkä annetun merkkijono kaikki permutaatiot generoidaan? Haluaisin tallettaa muuttujiin kaikki kymmennumeroiset luvut, joissa eka numero ei ole nolla. Ilmeisesti merkkijonotaulukkoja käytetään, mutta miten kyseisen merkkijonon voi siten muuttaa 10-numeroiseksi intiksi tai longiksi?

Tai siis oikeastaa tarvitsen luupin, jossa muuttujaan tallennetaan kerralla yksi luku, mutta luuppi käy läpi kaikki permutaatiot. Näin muistia ei kulu tarpeettomasti.

2

327

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Yksinkertaista

      Yksinkertaista ja tee homma ensin 2-numeroisena (ja ehkä myös 3-numeroisena), niin sen jälkeen 10-juttu pitäisi onnistua helposti.

    • Delete program ? (Y)

      Permutaatiossa halutaan järjestää kaikki joukon alkiot.

      Jos sinulla on merkkijonossa esim "abc", siitä on mahdollista muodostaa seuraavat permutaatiot :

      abc, acb, bac, bca, cab, cba

      Jos tosiaan haluat tehdä funktion, joka palauttaisi kaikki permutaatiot vaikka esim. luvusta "1234567890", niin sinulla edessä pienoinen ongelma muistin suhteen. Jos kyse on tosiaan pelkistä luvuista voit vähentää muistin kulutusta tallentamalla kunkin permutaation tulokset suoraan long muuttujiin. Silti noita muuttujia tulee aika paljon .

      Helpointa kai laskea ensin kokonaisalkiomäärä eli k! (10! = 3628800) ja sitten varata ensin niille kaikille riittävän suuri taulukko (3628800 x 4tavua = 14515200 = 14,5Mt). Riippuen missä koneessa työskentelet, saatat joutua paloittelemaan taulukon pienempiin osiin. Yleisesti ottaen kaikilla uudemmilla 32-bittisillä koneilla tuo pitäisi olla vielä suhteellisen helppoa. Jos haluat haastetta, tee sama 8-bittisellä koneella. ;)

      Vaihtoehtoisesti voit tallentaa permutaatiot linkitettyyn listaan tai sitten molempien (taulukko/lista) tapojen yhdistelmään. Miten vaan tiedot tuntuisivat paremmin saatavilla niiden jatkokäsittelyä silmällä pitäen.

      Luodessasi eri permutaatiota suosittelen karsimaan 0-alkuiset pois jo luontivaiheessa, koska siten säästyy muistia. Tällöin tarvittavan muistin määrä on vain k!-(k-1)!.

      Ei se tuon kummempi pitäisi olla, jos ymmärsin kysymyksen oikein.

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Tänään pyörit ajatuksissa enemmän, kun erehdyin lukemaan palstaa

      En saisi, silti toivon että sinä vielä palaat ja otetaan oikeasti selvää, hioituuko särmät ja sulaudummeko yhteen. Vuod
      Ikävä
      33
      7074
    2. Huomenta ihana

      Kauniskasvoinen ihanuus 😘 saan sut vielä
      Ikävä
      38
      6474
    3. Hei rakas...

      Miten on työpäivä sujunut? Rakastan sinua 💗
      Ikävä
      29
      3544
    4. Ei tämä etene ikinä

      Kun kumpikaan ei enää ota yhteyttä. Mä en ainakaan uskalla.
      Ikävä
      45
      3100
    5. Edelleen sitä on vaikea uskoa

      Että olisit oikeasti rakastunut muhun
      Ikävä
      34
      2744
    6. Vitsi mihin menit. Heti takasin.

      Mä näin sut tuu takasin! Oli kiire, niin en ehtiny sin perään!
      Ikävä
      16
      2462
    7. Toiveikas vai toivoton

      torstai? Ajatuksia?
      Ikävä
      37
      2198
    8. Mukavaa päivää

      Mun rakkauden kohteelle ❤️ toivottavasti olet onnellinen
      Ikävä
      16
      2086
    9. Voi ei! Jari Sillanpää heitti keikan Helsingissä - Hämmästyttävä hetki lavalla...

      Ex-tangokuningas on parhaillaan konserttikiertueella. Hän esiintyi Savoy teatterissa äitienpäivänä. Sillanpää jakoi kons
      Suomalaiset julkkikset
      48
      1957
    10. Koko ajan olet

      Senkin suhteen kiusannut. Halut on ihan mielettömät olleet jo pitkään
      Ikävä
      34
      1810
    Aihe