Rumah Kewangan Peribadi Cabaran Pengaturcaraan java: Mengulangi Menara Hanoi - patung

Cabaran Pengaturcaraan java: Mengulangi Menara Hanoi - patung

Video: Dijangka siap hujung tahun, PM tinjau projek Menara Maha 2024

Video: Dijangka siap hujung tahun, PM tinjau projek Menara Maha 2024
Anonim

Cabaran ini membantu anda menggunakan bakat pengaturcaraan anda untuk menulis program Java yang akan mencetak langkah-langkah yang diperlukan untuk menyelesaikan teka-teki Towers of Hanoi memandangkan jumlah cakera.

Menara Hanoi adalah teka-teki logik klasik yang terdiri daripada tiga pasak menegak dan beberapa cakera dari pelbagai diameter. Setiap cakera mempunyai lubang di tengah, yang membolehkan cakera-cakera itu diselubungi pasak.

Teka-teki itu bermula dengan semua cakera yang disusun di salah satu pasak, dengan cakera terbesar di bahagian bawah dan terkecil di bahagian atas. Objek teka-teki adalah untuk memindahkan tumpukan cakera ke salah satu pasak lain, mematuhi hanya dua peraturan mudah: (1) anda boleh memindahkan hanya satu cakera pada satu masa, dan (2) anda tidak boleh meletakkan cakera yang lebih besar pada atas yang lebih kecil.

Angka berikut menunjukkan penyelesaian untuk timbunan tiga cakera. Seperti yang anda dapat lihat, penyelesaian memerlukan tujuh langkah:

  1. Pindahkan Disk 1 dari Peg 1 ke Peg 3.

  2. Pindahkan Disk 2 dari Peg 1 ke Peg 2.

  3. Pindahkan Disk 1 dari Peg 3 ke Peg 2.

  4. Pindahkan Disk 3 dari Peg 1 ke Peg 3.

  5. Pindahkan Disk 1 dari Peg 2 ke Peg 1.

  6. Pindahkan Disk 2 dari Peg 2 ke Peg 3.

  7. Pindahkan Disk 1 dari Peg 1 ke Peg 3.

Selepas tujuh langkah ini, timbunan cakera akan berada di Peg 3.

Penyelesaian untuk teka-teki Towers of Hanoi dengan tiga cakera.

Teka-teki menjadi menarik apabila anda mula menambahkan cakera ke kedudukan permulaan. Dengan tiga cakera, teka-teki memerlukan hanya 7 langkah untuk menyelesaikannya. Dengan empat cakera, 15 langkah diperlukan. Dengan lima cakera, anda memerlukan 31 langkah. Enam cakera memerlukan 64 langkah.

Jika anda telah mengikuti matematik, bilangan langkah yang diperlukan untuk menyelesaikan teka-teki meningkat secara eksponen apabila bilangan cakera meningkat. Secara spesifik, bilangan langkah yang diperlukan untuk memindahkan cakera n ialah 2 n - 1. Sebagai contoh, timbunan 20 cakera memerlukan 2 20 - 1 bergerak; itu lebih daripada satu juta bergerak!

Satu legenda yang menarik dikaitkan dengan teka-teki: Di ​​sebuah kuil di Hanoi, para biku telah bekerja di Towers of Hanoi puzzle dengan 64 cakera sejak penciptaan bumi. Apabila mereka selesai, dunia akan berakhir. Mujurlah, kita mempunyai masa yang lama untuk menunggu: Jika sami dapat bergerak satu cakera sesaat, ia akan menjadi 580 bilion tahun lagi sebelum mereka menyelesaikan teka-teki.

Cabaran anda mudah: Tulis program Java yang akan mencetak langkah-langkah yang diperlukan untuk menyelesaikan teka-teki Towers of Hanoi memandangkan jumlah cakera. Program ini harus terlebih dahulu menggesa pengguna untuk jumlah cakera. Kemudian ia harus memaparkan langkah-langkah, satu per baris.Setiap langkah harus menunjukkan kepak untuk memindahkan cakera dari, dan kepak untuk memindahkan cakera ke. Langkah-langkah juga perlu diberi nombor berurutan.

Setelah selesai, program harus ulangi, meminta pengguna untuk jumlah cakera lagi. Program ini harus berakhir apabila pengguna memasuki 0.

Berikut adalah contoh output konsol program anda harus menghasilkan:

Berapa banyak cakera? (0 hingga akhir) 3 1: 1 hingga 3 2: 1 hingga 2 3: 3 hingga 2 4: 1 hingga 3 5: 2 hingga 1 6: 2 hingga 3 7: 1 hingga 3 Berapa cakera ? (0 hingga tamat) 0

Satu-satunya keperluan lain untuk menyelesaikan cabaran ini ialah penyelesaian anda mesti menggunakan pengaturcaraan rekursif. Dengan kata lain, penyelesaian anda mesti termasuk kaedah yang memanggil dirinya untuk menyelesaikan teka-teki.

Pengaturcaraan rekursif boleh mencabar, jadi berikut adalah beberapa petunjuk untuk penyelesaian teka-teki ini:

  • Teka-teki terdiri daripada tiga pasak. Salah satunya mengandungi tumpuan cakera permulaan; panggil peg ini pancang sumber . Salah satu daripada dua pasak yang lain adalah tiang yang anda hendak alihkan tumpukan cakera; panggil peg ini pegat sasaran . Palang ketiga tersedia untuk digunakan sebagai pancang pertengahan untuk menyimpan cakera pada sementara ketika anda memindahkannya. Panggil peg ini pegat ganti .

  • Kaedah rekursif anda harus menerima tiga parameter: bilangan cakera untuk bergerak, pasak sumber, dan pasang sasaran. Gunakan nilai integer 1, 2, dan 3 untuk mewakili pasak.

  • Idea asas menyelesaikan teka-teki secara rekursif adalah ini: Untuk memindahkan timbunan cakera dari pasak sumber ke pasak sasaran memerlukan tiga langkah:

    1. Pindahkan semua cakera dalam timbunan kecuali cakera bawah ke pegangan ganti.

    2. Pindahkan cakera terbesar dalam timbunan asal kepada pasak sasaran.

    3. Pindahkan timbunan yang anda bergerak di Langkah 1 dari pasak ganti ke pasak sasaran.

  • Sudah tentu, peraturan teka-teki membolehkan anda untuk memindahkan hanya satu cakera pada satu masa, jadi anda tidak dapat mencapai Langkah 1 dan 3 prosedur yang diberikan di sini dengan hanya mengambil stack dan memindahkannya. Di sinilah rekursi masuk Untuk Langkah 1 dan 3, anda memanggil kaedah secara rekursif, setiap kali menentukan satu cakera yang lebih sedikit untuk dipindahkan, dan setiap kali menggunakan pasak sasaran sebelumnya sebagai pasang ganti.

  • Tertanya-tanya mengapa kaedah rekursif tidak perlu menerima pegangan ganti sebagai hujah? Kerana anda dengan mudah boleh mengira, memandangkan pasak sumber dan target. Oleh kerana terdapat hanya tiga pasak, berjumlah 1, 2, dan 3, jumlah tiga pasak adalah 6 (1 + 2 + 3). Memandangkan sumber dan pasak sasaran, anda boleh mengira pasang ganti dengan menolak sumber dan sasaran tiang dari 6. Sebagai contoh, jika pasak sumber adalah 1 dan pasak sasaran adalah 3, pasang ganti mestilah 2 kerana

    6 - 3 - 1 = 2.

Untuk penyelesaiannya, pergi ke tab Muat Turun pada halaman produk Java All-in-One Untuk Dummies, Edisi ke-4.

Nasib baik!

Cabaran Pengaturcaraan java: Mengulangi Menara Hanoi - patung

Pilihan Editor

Cara Mengeksport Persembahan PowerPoint 2016 anda ke PDF - patung

Cara Mengeksport Persembahan PowerPoint 2016 anda ke PDF - patung

PDF, yang bermaksud Format Dokumen Portable , adalah format yang popular untuk menukar fail. Anda boleh menukar persembahan PowerPoint 2016 ke format PDF dengan mengikuti langkah-langkah berikut: Pilih Fail → Eksport → Buat Dokumen PDF / XPS. Klik butang Buat PDF / XPS. Ini membawa kotak dialog yang ditunjukkan di sini. Membuat dokumen PDF. Navigasi ke lokasi di mana ...

Cara Cari Word dengan Thesaurus PowerPoint 2007 - patung

Cara Cari Word dengan Thesaurus PowerPoint 2007 - patung

Jika kata yang anda perlukan persembahan PowerPoint anda berada di hujung lidah anda tetapi anda tidak boleh mengingatinya, memberikan Thesaurus PowerPoint satu pukulan. Untuk mencari sinonim untuk perkataan pada slaid PowerPoint, mulakan dengan mengklik kanan perkataan dan memilih Sinonim pada menu pintasan. Untuk mencari sinonim yang baik, ...

Bagaimana untuk menarik objek sederhana dalam PowerPoint 2013 - dummies

Bagaimana untuk menarik objek sederhana dalam PowerPoint 2013 - dummies

Untuk menarik objek pada slaid PowerPoint 2013, pertama memanggil tab Insert pada Reben. Kemudian klik butang Bentuk (terletak dalam kumpulan Ilustrasi) untuk mendedahkan galeri bentuk yang boleh anda pilih. Akhir sekali, pilih bentuk yang anda mahu menarik dari galeri Bentuk. Simpan petunjuk ini untuk memastikan ...

Pilihan Editor

Cara Memindahkan Wang Antara Akaun Bank di QuickBooks 2011 - dummies

Cara Memindahkan Wang Antara Akaun Bank di QuickBooks 2011 - dummies

Menu Perbankan dalam QuickBooks 2011 membekalkan arahan yang berguna untuk memindahkan wang antara akaun bank. Hanya pilih Perbankan → Dana Pemindahan, dan QuickBooks memaparkan Dana Pemindahan Antara tetingkap Akaun. Ikuti langkah berikut untuk menggunakan Dana Pemindahan Antara tetingkap Akaun: Gunakan medan Tarikh untuk mengenal pasti tarikh pemindahan. Anda boleh memasukkan tarikh dalam ...

Bagaimana Membekalkan Nombor-nombor yang Hilang untuk Muktamadkan Carta Akaun dalam QuickBooks 2016

Bagaimana Membekalkan Nombor-nombor yang Hilang untuk Muktamadkan Carta Akaun dalam QuickBooks 2016

Tugas terakhir anda untuk memuktamadkan Carta Akaun adalah memasukkan jumlah baki percubaan ke dalam QuickBooks 2016. Untuk melaksanakan tugas ini, anda perlu mempunyai baki percubaan yang disediakan pada tarikh penukaran. Ikuti langkah berikut: Pilih Entri Syarikat → Buat Entri Jurnal Umum atau Akauntan → Buat Entri Jurnal Umum. Memaparkan QuickBooks ...

Cara untuk Mengirim Arahan Perbankan Elektronik dengan QuickBooks 2015 - patung

Cara untuk Mengirim Arahan Perbankan Elektronik dengan QuickBooks 2015 - patung

Anda boleh melakukan semua perbankan elektronik anda dengan QuickBooks. Selepas anda menerangkan pembayaran dalam talian dan pemindahan akaun yang anda mahu membuat QuickBooks, anda menghantar maklumat tersebut ke bank. Untuk berbuat demikian, ikuti langkah berikut:

Pilihan Editor

Menambahkan Carta Excel ke Dokumen Word 2007 - dummies

Menambahkan Carta Excel ke Dokumen Word 2007 - dummies

Apabila anda memasukkan carta dalam Word, Excel dimulakan secara automatik, dan data yang anda carta diletakkan dalam buku kerja Excel. Bagaimanapun, buku kerja Excel itu bukan? t disimpan sebagai dokumen berasingan. Sebaliknya, carta dan lembaran kerja buku kerja disimpan di dalam dokumen Word. Prosedur berikut menunjukkan bagaimana untuk memasukkan carta ...

Mengubah Format Seksyen dalam Dokumen Word 2007 - dummies

Mengubah Format Seksyen dalam Dokumen Word 2007 - dummies

Satu bahagian dalam Word 2007 adalah sebahagian dokumen yang mengandungi pemformatan halaman sendiri. Dengan bahagian, anda boleh mengarahkan arahan pemformatan halaman untuk hanya mempengaruhi seksyen dan bukannya merangkumi keseluruhan dokumen. Dengan setiap bahagian berasingan dari yang lain, dokumen boleh mempunyai pelbagai format. Dalam angka pertama ini, dokumen tersebut mempunyai ...