Ev Kişisel Finans Java Programlama Mücadelesi: Hanoi Kulelerini Taşırken - AYDINLATMA

Java Programlama Mücadelesi: Hanoi Kulelerini Taşırken - AYDINLATMA

Video: Coding Minecraft in One Week - C++/OpenGL Programming Challenge 2024

Video: Coding Minecraft in One Week - C++/OpenGL Programming Challenge 2024
Anonim

Bu zorluk, disk sayısı göz önüne alındığında Hanoi Kuleleri'ni çözmek için gereken adımları basacak bir Java programı yazmak için programlama yeteneklerinizi kullanmanıza yardımcı olur.

The Towers of Hanoi üç dikey mandal ve çeşitli çaplarda disklerden oluşan klasik bir mantık bulmacasıdır. Her diskin ortasında bir delik vardır, böylece diskler mandalların üzerinden geçilebilir.

Bulmaca, mandallardan birinin üzerine istiflenmiş olan disklerin hepsiyle başlar, en büyük disk en altta ve en küçük en üsttedir. Bulmacanın amacı, disklerin yığınını diğer iki mandalın birine doğru hareket ettirmek ve yalnızca iki basit kurala uymaktır: (1) bir kerede yalnızca bir disk taşıyabilir ve (2) asla daha büyük bir disk yerleştiremezsiniz daha küçük olanın üstü.

Aşağıdaki resim, üç diskin bir yığınının çözümünü göstermektedir. Gördüğünüz gibi, çözüm yedi hamle gerektirir:

  1. Disk 1'i Pim 1'den Pim 3'e Taşı.

  2. Disk 2'yi Pim 1'den Pim 2'ye taşıyın.

  3. Disk 1'i Pim 3'ten Pim 2'ye taşıyın.

  4. Disk 3'ü Peg 1'den Peg 3'e taşıyın.

  5. Disk 1'i Peg 2'den Peg 1'e taşıyın.

  6. Disk 2'yi Peg 2'den Peg 3'e taşıyın.

  7. Disk 1'i Peg 1'den Peg 3'e taşıyın.

Bu yedi adımdan sonra disk yığını Peg 3'te olacaktır.

Towers of Hanoi için çözüm üç diskler.

Başlangıç ​​konumuna disk eklemeye başladığınızda bulmaca ilginç hale geliyor. Üç disk ile, bulmaca çözmek için sadece 7 hamle gerekiyor. Dört disk ile 15 hamle gereklidir. Beş disk varsa, 31 hareket gerekecek. Altı disk 64 hamle gerektiriyor.

Matematiği takip ediyorsanız, bulmaca çözmek için gereken hamle sayısı disk sayısı arttıkça katlanarak artar. Örneğin, n diskleri taşımak için gereken hareket sayısı 2 n - 1'dir. Örneğin, 20 diskten oluşan bir yığın, 2 20 - 1 hamle gerektirir; Bu bir milyondan fazla hamle!

Bulmaca ilginç bir efsane ile bağlantılı: Hanoi'deki bir tapınakta keşişler, yeryüzünün oluşturulmasından bu yana 64 diskli bir Hanoi Kuleleri üzerinde çalışıyorlar. Bitince, dünya sona erecek. Neyse ki, beklemek uzun bir zamanımız var: keşişler saniyede bir disk oynatabiliyorlarsa, bulmacayı bitirmeden önce 580 milyar yıl daha sürecekler.

Sorununuz basit: Hanoi Kuleleri'ni çözmek için gereken adımları basacak bir Java programı yazınız. Disk sayısı göz önüne alındığında. Program ilk önce kullanıcıya disk sayısı sorar. Ardından, satır başına bir tane olmak üzere adımları görüntülemesi gerekir.Her adım, diskin hangi parçadan taşınacağı ve diskin hangi parçaya taşınacağı belirtilmelidir. Basamaklar da sıralı olarak numaralandırılmalıdır.

Bitirince, program tekrarlanmalı ve kullanıcıdan disk sayısını tekrar isteyecektir. Kullanıcı 0 girdiğinde program bitmelidir.

Programınızın üretmesi gereken konsol çıktı örneği:

Kaç disk? 1: 1 ila 3 2: 1 ila 2 3: 3 ila 2 4: 1 ila 3 5: 2 ila 1 6: 2 ila 3 7: 1 ila 3 Kaç tane disk (0 ila bitiş) ? (0 ile bitiş) 0 Bu zorluğu çözmenin tek zorunlusu çözümünüzün özyinelemeli programlamayı kullanmasıdır. Başka bir deyişle, çözümünüz bulmacayı çözmek için kendisini çağıran bir yöntem içermelidir.

Özyinelemeli programlama zor olabilir, bu nedenle bu bulmacanın çözümüne bir kaç ipucu:

Bulmaca üç payandadan oluşur. Bunlardan birinde disklerin başlangıç ​​yığını bulunur; Bu perçin

  • kaynak pervazını olarak adlandırın. Geriye kalan iki mandaltan biri, disk yığınını taşımak istediğiniz bölmedir; Bu mandalı hedef pimi olarak adlandırın. Üçüncü mandal, onları taşırken geçici olarak diskleri depolamak için bir ara parça olarak kullanabilirsiniz. Bu mandalı yedek pimi olarak adlandırın. Özyinelemeli yönteminiz üç parametreyi kabul etmelidir: Taşılacak disk sayısı, kaynak dilimi ve hedef dil. Mandalları temsil etmek için 1, 2 ve 3 numaralı tamsayı değerlerini kullanın.

  • Bulmacayı yinelemeli olarak çözmenin temel fikri şudur: Bir yığın yığın yığını hedef kancaya taşımak için üç adım gerekir:

  • Alt disk haricindeki tüm diskleri yedek cıvata.

    1. Orijinal destedeki en büyük diski hedef bölüme taşıyın.

    2. Adım 1'de taşıdığınız istifi, yedek dişli çubuğundan hedef dişliye taşıyın.

    3. Elbette, bulmaca kuralları bir kerede yalnızca bir disk taşımanıza izin verdiği için, burada verilen yordamın 1. ve 3. adımlarını yalnızca yığını toplayıp taşıyarak başaramazsınız. Adım 1 ve 3 için, yinelemeli olarak çağırırsınız; her seferinde taşınacak daha az disk belirtiliyor ve her seferinde önceki hedefi saplamayı yedek dişli olarak kullanıyorsunuz.

  • Özyinelemeli yöntemin neden yedek uçları bir argüman olarak kabul etmeye ihtiyacı olmadığını merak ediyor musunuz? Kaynak ve hedef paçavraları göz önüne alındığında, kolayca hesaplayabilirsiniz. 1, 2 ve 3 numaralı yalnızca üç payanda bulunduğundan, üç topuzun toplamı 6 (1 + 2 + 3) 'dır. Kaynak ve hedef dişlileri göz önüne alındığında, kaynak ve hedef dişliyi 6'dan çıkararak yedek dişliyi hesaplayabilirsiniz. Örneğin kaynak dişlisi 1 ve hedef dişlisi 3 olduğunda, yedek dişli ucu 2 olmalı, çünkü

  • 6 - 3 - 1 = 2.

    Çözüm için,

Java Öpücük için Hepsi Birarada> 4. Baskı ürün sayfasındaki İndirilenler sekmesine gidin. İyi şanslar!

Java Programlama Mücadelesi: Hanoi Kulelerini Taşırken - AYDINLATMA

Editörün Seçimi

Excel 2016 Çalışma Kitabı Tasarlamak - kuklalar

Excel 2016 Çalışma Kitabı Tasarlamak - kuklalar

Tüm Excel 2016 çalışma sayfaları şablonlardan gelmemektedir. Çoğu zaman, belirli çalışma kitaplarının türlerinin üretildiği standart modeller olarak işlev göreceği düşünülen oldukça eşsiz elektronik tablolar oluşturmanız gerekir. Aslında, Excel'de oluşturduğunuz e-tabloların çoğu, bu türden olabilir, özellikle işiniz güvenmiyorsa ...

Excel 2013'teki Veri Formundaki Kayıtları Düzenleme - Veriler

Excel 2013'teki Veri Formundaki Kayıtları Düzenleme - Veriler

Veritabanından sonra yolda gidiyorsanız ve Excel 2013'te kayıt girmekle yetiniyorsanız, veritabanında düzenli bakım yapmak ve düzenlemek için veri formunu kullanmaya başlayabilirsiniz. Örneğin, değiştirmek istediğiniz bir kaydı bulmak için veri formunu kullanabilirsiniz ve sonra düzenlemeleri yapın ...

Bir Excel 2010 Tablosundaki Kayıtları Düzenleme - mankenler

Bir Excel 2010 Tablosundaki Kayıtları Düzenleme - mankenler

Kayıtları düzenlemeye veya silmeye ve masada rutin bakım yapmaya ihtiyaç duyarsınız. Kayıtları el ile çalışma sayfasında düzenleyebilir veya gerekli değişiklikleri yapmak için bir veri formu kullanabilirsiniz. Örneğin, bir veri dosyasını bulmak için veri formunu kullanabilirsiniz ...

Editörün Seçimi

Excel 2010 Grafiğine Veri Tablosu Ekleme - Excel 2010'da çekimser

Excel 2010 Grafiğine Veri Tablosu Ekleme - Excel 2010'da çekimser

Veri tabloları, grafiğin değerlerini grafiğin altındaki bir tabloda görüntüler. 3B grafik kullanırken olduğu gibi, grafiksel bir ekranla birlikte kesin değerleri görmeniz gerekirse yardımcı olurlar. Ayrıca, bazı çizelgelerde okunması zor olan veri etiketlerinden daha uygun olabilirler.

Excel Pivot Tablosuna Hesaplanan Öğe Ekleme - mankenler

Excel Pivot Tablosuna Hesaplanan Öğe Ekleme - mankenler

ÖğEleri bir Excel pivot tabloya ekler. Şimdi, açıkçası, hesaplanan bir öğe eklemek genelde mantıklı değil. Pivot tablolarınız için, eksiksiz, zengin bir Excel listesinden veya bazı veritabanlarından veri aldıysanız, öğe miktarlarını hesaplayarak veriler oluşturmak, biraz goofy'den daha fazlasını gerektirir. Ancak, ...

Editörün Seçimi

Ağınızı bir Güvenlik Testi için Nasıl Eşleştirilir - daha önce ağınızı haritalamanın parçası olarak mankenler

Ağınızı bir Güvenlik Testi için Nasıl Eşleştirilir - daha önce ağınızı haritalamanın parçası olarak mankenler

Güvenlik testi veya etik bir kesmek gerçekleştirirken, halka açık veritabanlarını ve kaynaklarını arayarak başkalarının sisteminiz hakkında ne bildiğini öğrenebilirsiniz. WHOIS aramaları En iyi başlangıç ​​noktası İnternet'te bulunan araçlardan herhangi birini kullanarak bir WHOIS araması gerçekleştirmektir. Içinde ...

Bir Ağdaki Spam'i En Düşük Düzeye Getirme - AYAKLAR

Bir Ağdaki Spam'i En Düşük Düzeye Getirme - AYAKLAR

Hiçbir antispam programı mükemmel değildir; belirli bir miktarda spam'ın gelen kutunuza geçmesini bekleyin. Alınmayan spam miktarını en aza indirgemek için siz (ve kullanıcılarınızın) aklınızda tutmanız gereken bazı ipuçları: Şifrenizi isteyen veya ...

Güvenlik Testi Sonuçlarını Birlikte Götürmek İçin - Güvenlik testi verileriniz olduğunda yalanlar

Güvenlik Testi Sonuçlarını Birlikte Götürmek İçin - Güvenlik testi verileriniz olduğunda yalanlar

- Belgelenen ekran görüntülerinden ve manuel gözlemlerden, kullandığınız çeşitli güvenlik açığı tarayıcıları tarafından üretilen detaylı raporlara kadar - ne yapıyorsunuz? Belgelerinizi ince dişli bir tarakla incelemeniz ve öne çıkan tüm alanları vurgulam