|
Matil on pabeririba, mis koosneb N ühesugusest ruudukujulisest lahtrist. Ta kirjutab lahtritesse vasakult paremale arvud 1...N ja murrab riba kokku nii, et tulemuseks on ühe lahtri suurune ja N kihi paksune pakk. Seejärel väidab ta, et pakis ülalt alla lugedes on arvud järjekorras A1,A2,...,AN. Kirjutada programm, mis kontrollib, kas see väide võib tõele vastata. Näide: 3,1,2,4 --> jah (selline tulemus tekib, kui riba vasakult paremale kokku "rullida"). Näide: 1,3,2,4 --> ei. Näide: 1,4,3,2 --> jah (selline tulemus tekib, kui murda riba pooleks paremalt vasakule ja tulemus uuesti pooleks vasakult paremale). Näide: 2,3,4,1 --> jah (selline tulemus tekib, kui pärast eelmise näite voltimist pakk kummuli keerata). PS. See on meelelahutus, mitte küsimus, mille vastust mulle millekski tegelikult vaja oleks. |
|
Okih, ei viitsinud ära optimiseerida... aga töötab:
Seletus:
|
|
Lahendus mis esmalt tuli meelde: haruta voltimistee lahti. Programm:
Ning kasutamiseks nt:
Tulem:
(Jan 24 '10 at 19:13)
Ahto Truu ♦♦
|
|
Voltisin natuke paberit. Testisin täpselt 2-e paberi ribaga, st. võin eksida. Kas võib olla, et lahendus kontrollimiseks on umbes selline:
Eee... Kas ma saan õigesti aru, et mõte on teha N tipuga graaf (üks tipp iga lahtri kohta) ja panna sinna N-1 serva (üks serv iga lõppjadas kõrvuti oleva lahtripaari kohta)? See ei saa kindlasti lahendus olla, sest selliselt saadud graafi servad moodustavad konstruktsiooni põhjal alati Euleri ahela ja seega ei ole sellelt lahenduselt kunagi võimalik saada vastust "ei".
(Jan 27 '10 at 18:38)
Ahto Truu ♦♦
|
|
läksin lihtsamat teedpidi, kõikide variantide läbiproovimine. pole jah just kiireim lahendus aga ei suutnud midagi paremat välja mõelda :P
Koodi võiks ikka
(Feb 28 '10 at 20:38)
Timo
|

Kas näide 1 on korrektne?
Peaks olema küll. Alguses on 1,2,3,4. Esimese voltimisega läheb 1 kummuli 2 peale, saame (1,2),3,4. Teise voltimisega läheb (1,2) kummuli 3 peale, saame (2,1,3),4. Kolmanda voltimisega läheb (2,1,3) kummuli 4 peale, saamegi (3,1,2,4).