Kysy velholta #357
Muodosta kolme murtolukua, joissa kussakin on yksi numero osoittajassa ja kaksi numeroa nimittäjässä ja joiden summa on yksi. Käytä jokaista numeroa 1–9 täsmälleen kerran.
Esimerkiksi 8/16 + 9/27 + 3/24 täyttää kaikki ehdot, paitsi että summa on 23/24, ei 1.
Vastauksen löytämiseksi on läpikäytävänä 60 480 mahdollista permutaatiota, kuten permut(9,3)*permut(6,3)*permut(3,3)/fact(3). Minun on myönnettävä, että yritin ainakin tunnin yrityksen ja erehdyksen kautta löytämättä ratkaisua.
Kirjoitin siis ohjelman, joka lajittelee läpi kaikki fact(9) = 362 880 tapaa lajitella yhdeksän numeroa ja testasin niitä kaikkia. Hankala osuus oli lajitella läpi kaikki mahdolliset tavat järjestää yhdeksän numeroa. Näin se tehdään leksografista lajittelua käyttäen.
- Laita kaikki yhdeksän alkiota taulukkoon järjestettynä pienimmästä suurimpaan.
- Etsi taulukon viimeinen alkio siten, että seuraava alkio on suurempi. Jos yhtäkään alkiota ei löydy, lopeta ohjelma.
- Aloittamalla vaiheen 2 jälkeisestä alkiosta etsi taulukon viimeinen alkio, joka on suurempi kuin vaiheen 2 alkio.
- Vaihda vaiheiden 2 ja 3 taulukon elementit keskenään.
- Käännä taulukon alkiot päinvastaisiksi vaiheen 2 jälkeisestä alkiosta loppuun asti.
- Palaa vaiheeseen 2
Tämän prosessin jälkeen löydät oikean vastauksen kuusi kertaa, kerran kaikille kuudelle tavalle järjestää kolme murtolukua.
[spoiler=Koodi]
Kirjoitin seuraavan koodin lajittelemaan jokaisen numeron 1:stä 9:ään leksografiseen järjestykseen ja testaamaan jokaisen, oliko se ratkaisu.
void kolme_murtoluku(tyhjä) { int i, x_max, y_max, temp_array[100], hold, pt; int lex_array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int elementtien_määrä = koko(lex_array) / koko(lex_array[0]); kokonaislukumäärä = 0; totuusarvo stop = false; kaksinkertainen yhteensä3; cerr << "Elementtien lukumäärä =\t" << elementtien_lukumäärä << "\n"; tehdä { määrä++; tot3 = (double)lex_array[0] / (double)(10 * lex_array[1] + lex_array[2]); tot3 += (double)lex_array[3] / (double)(10 * lex_array[4] + lex_array[5]); tot3 += (double)lex_array[6] / (double)(10 * lex_array[7] + lex_array[8]); jos (yhteensä3 == 1.0) { cerr << count << "\t"; cerr << lex_array[0] << "/" << lex_array[1] << lex_array[2] << " + "; cerr << lex_array[3] << "/" << lex_array[4] << lex_array[5] << " + "; cerr << lex_array[6] << "/" << lex_array[7] << lex_array[8] << "\n"; } x_maks = -1; for (i = 0; i < (elementtien_määrä - 1); i++) { jos (lex_array[i] < lex_array[i + 1]) x_maks = i; } jos (x_max >= 0) { y_maks = 0; for (i = x_max + 1; i < elementtien_määrä; i++) { jos (lex_array[x_max] < lex_array[i]) y_maks = i; } pidä = lex_array[x_max]; lex_array[x_max] = lex_array[y_max]; lex_array[y_max] = pidä; jos (x_max + 1 < elementtien_määrä - 1) // käännä { for (i = x_max + 1; i < elementtien_määrä; i++) { väliaikainen_taulukko[i] = lex_taulukko[i]; } pt = 0; for (i = x_max + 1; i < elementtien_määrä; i++) { lex_array[i] = temp_array[elementtien_määrä - 1 - pt]; pt++; } } } muu pysäkki = tosi; } while (stop == false); }[/spoileri]
Tätä kysymystä on kysytty ja siitä keskustellaan foorumillani Wizard of Vegasissa .
Miehellä oli kymmenen gallonan (10 gallonan) viinitynnyri ja kannu. Eräänä päivänä hän kaatoi kannun täyteen viiniä ja täytti sitten tynnyrin vedellä. Myöhemmin, kun viini ja vesi olivat sekoittuneet perusteellisesti, hän kaatoi toisen kannun täyteen ja täytti taas tynnyrin vedellä. Tynnyrissä oli sitten yhtä paljon viiniä ja vettä.
Mikä oli kannun tilavuus?
[spoiler=Ratkaisu]
Olkoon j = kannun tilavuus.
Ensimmäisen täytön jälkeen kannussa oli jäljellä 10 gallonaa viiniä. Kun viini oli korvattu vedellä, viinin suhde koko tynnyriin oli (10 gallonaa) / 10.
Kun kannu oli kauhonut laimennetun viinin, tynnyrissä oli jäljellä 10 gallonaa laimennettua viiniä. Puhtaan viinin määrä laimennetussa viinissä voidaan ilmaista seuraavasti:
(10 - j) * ((10 - j) / 10) = 5
(10 - j)^2 = 50
j^2 - 20j + 100 = 50
j^2 - 20j + 50 = 0
j = (20 +/- neliöjuuri(400-200))/2
j = (20 +/- 10*neliöyksikkö(2))/2
j = 10 +/- 5*neliömetriä(2)
Kannu ei voi olla tynnyriä suurempi, joten meidän on käytettävä negatiivista etumerkkiä:
j = 10 - 5*sqrt(2) = ~ noin 2,92893218813452 gallonaa.
[/spoileri]Tätä kysymystä on kysytty ja siitä on keskusteltu foorumillani Wizard of Vegasissa .
Kuusisivuista noppaa heitetään yhä uudelleen, kunnes heittojen summa on 13 tai suurempi. Mikä on loppusumman keskiarvo, mediaani ja moodi?
Mediaani = 14
Tila = 13
[spoiler=Ratkaisu]
Minun piti käyttää tähän Markov-ketjua. Seuraava taulukko näyttää kunkin loppusumman todennäköisyyden vasemman sarakkeen juoksevan summan mukaan. Aloita ilmeisistä tapauksista summille 13–18. Sitten juokseville summille 0–12, ota kuuden alla olevan solun keskiarvo.
Alkutilan todennäköisyydet löytyvät ensimmäiseltä riviltä, kun summa on 0.
Markov-ketju
Rolls-summa | 13 | 14 | 15 | 16 | 17 | 18 |
---|---|---|---|---|---|---|
0 | 0,279263 | 0,236996 | 0.192313 | 0,145585 | 0,097371 | 0,048472 |
1 | 0.290830 | 0,230791 | 0.188524 | 0,143842 | 0.097114 | 0,048899 |
2 | 0,293393 | 0,241931 | 0.181893 | 0,139625 | 0,094943 | 0,048215 |
3 | 0.289288 | 0,245178 | 0,193717 | 0,133678 | 0,091410 | 0,046728 |
4 | 0,280369 | 0.242560 | 0.198450 | 0,146988 | 0,086950 | 0,044682 |
5 | 0.268094 | 0,235687 | 0.197878 | 0,153768 | 0.102306 | 0,042267 |
6 | 0,253604 | 0,225827 | 0.193419 | 0,155611 | 0.111500 | 0,060039 |
7 | 0,360232 | 0,193566 | 0,165788 | 0.133380 | 0,095572 | 0,051462 |
8 | 0.308771 | 0.308771 | 0.142104 | 0.114326 | 0,081919 | 0.044110 |
9 | 0,264660 | 0,264660 | 0,264660 | 0,097994 | 0,070216 | 0,037809 |
10 | 0,226852 | 0,226852 | 0,226852 | 0,226852 | 0,060185 | 0,032407 |
11 | 0.194444 | 0.194444 | 0.194444 | 0.194444 | 0.194444 | 0,027778 |
12 | 0,166667 | 0,166667 | 0,166667 | 0,166667 | 0,166667 | 0,166667 |
13 | 1.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 |
14 | 0.000000 | 1.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 |
15 | 0.000000 | 0.000000 | 1.000000 | 0.000000 | 0.000000 | 0.000000 |
16 | 0.000000 | 0.000000 | 0.000000 | 1.000000 | 0.000000 | 0.000000 |
17 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 1.000000 | 0.000000 |
18 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 1.000000 |
Tätä kysymystä kysytään ja siitä keskustellaan foorumillani Wizard of Vegas .