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

339

    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. Voiko normaali ihminen ryhtyä vasemmistolaiseksi?

      Tätä jäin pohdiskelemaan.
      Maailman menoa
      202
      4228
    2. SDP haluaa 40 000 nettomaahanmuuttajaa

      SDP:n Suunnanmuutos-vaihtoehtobudjetissa, käy ilmi, että demarit itse asiassa vaativat räjähdysmäistä ”työperäisen” maah
      Maailman menoa
      146
      3778
    3. Orpo: Velkajarrua vastustavaa puoluetta vaikea ajatella hallitukseen

      No Minja Koskelan kommunistipuolue jäi ulos tuosta. Kaikki eduskuntapuolueet vasemmistoliittoa lukuun ottamatta sopivat
      Maailman menoa
      114
      3194
    4. Hienoa! Eduskunta luopui käteisen käytöstä

      Nyt tuo sama muutos pitää saada myös muuhun yhteiskuntaan. Käteistähän ei tarvitse tänä päivänä enää kuin rikolliset.
      Maailman menoa
      43
      1589
    5. Ikävä sinua mies

      Vuosia kuluu, mutta tunteet ei ole hävinnyt. Tasoittuneet toki, kun ei olla nähty. Järki palannut päähän kuitenkin. Se i
      Ikävä
      19
      1458
    6. Mikä tämä henkilö mahtaa touhuta Parkanossa

      Kamalaa https://www.ylasatakunta.fi/teksti/pirkanmaan-karajaoikeus-vangitsi-koiran-tappamisesta-epaillyn-6.68.127794.b58
      Parkano
      34
      1390
    7. Sulla on avaimet ja keinot

      Jos haluat jatkaa tutustumista. Itse olen niin jäässä etten pysty tekemään enää mitään. Pidempi keppi johon on helpompi
      Ikävä
      25
      1375
    8. Orpo loukkaantui fasismiin viittaavasta sanavalinnasta

      Mutta miksi loukkaantui? Orpohan on tehnyt yhteistyötä fasistien kanssa jo vuonna 2019, siis jo neljä vuotta ennen loukk
      Maailman menoa
      27
      1351
    9. Kiinnostaa - ei kiinnosta - kiinnostaapas

      Selittäkää hämmentyneelle miksi miehiä ei ikinä kiinnosta silloin, kun sitä olisi itsekin kiinnostunut? Sitten kun siirt
      Sinkut
      116
      1140
    10. Martina haluaa Marbellaan

      Martinan tekisi mieli ottaa lennot Marbellaan, jossa näkisisi kauniita ja hyväntuulisia ihmisiä. No sitten pitää matkust
      Kotimaiset julkkisjuorut
      215
      1053
    Aihe