Bu benim C / C ++ bulmaca serisinin 3.; ilk 2 özledim durumunda onlar burada: (1) m3ph1st0s programlama bulmaca 1 (C ++) (2) m3ph1st0s programlama bulmaca 2 (C ++): "Sert ara!"
Bulmacalarımın% 100 orijinal olduğunu söylemeliyim. Değilse, metinde her zaman böyle söyleyeceğim. 3. bulmacamın 2 bölümü var:
Bulmaca 3.1
Bu bölüm (3.1) orijinal bir bulmaca değil, bir süre önce okuduğum bazı internet sayfalarından toplandı. Burada bir başlangıç noktası ve sizin için bir ısınma olarak kullanıyorum. Bunu çözün ve sonra 2. bölüme geçin.
Bazıları "+" işaretini 20 kez yazdırmayı denedi ve aşağıdaki programı buldu:
#include <stdio.h>
int main() {
int i;
int n = 20;
for( i = 0; i < n; i-- )
printf("+");
return 0;
}
Beklenen sonuca sahip olmadığı açıktır - program asla bitmez. Düzelt! Kolay? Şimdi programı SADECE BİR KARAKTER - tabii ki boşluk olmayan karakter değiştirerek düzeltin! Bu meydan okuma için 3 çözüm var. 3 tanesini bulun. Sadece açıklığa kavuşturmak için: program 20 "+" işareti çıkarmalı ve hızlı bitmelidir. Beni "hızlı" ne anlama geldiğini eleştirmeden önce, bunun en fazla birkaç saniye anlamına geldiğini söyleyeceğim (bu arada çok net ama sadece onu netleştirmek için).
Bulmaca 3.2
EDIT EDİLDİ Daha önce bana 3.2.2 bulmacasının çözümünün derleyiciye bağlı olabileceğine işaret etmiştim. Konuyla ilgili olası tartışmaları ortadan kaldırmak için, tartışmayı oluşturmamaya çok dikkat edeceğim zaman fikri değiştireceğim ve bir sonraki bulmacada geliştireceğim. Ancak, bu bulmacanın devam etmesini sağlamak için 3.2.2 için küçük bir değişiklik yapacağım (çözüm daha kolay ama daha temiz olacak).
Bulmacayı ilk gördüğümde oldukça harika buldum. Çözmeyi başardım ama biraz dikkat gerektirdiği için hemen değil. Eğer buradaysanız, çok çözdüğünüz anlamına gelir. Tüm olası karakterleri olası değerlerle değiştirmek ve her çözümü test etmek için bir program yazarak bunu yaparsanız, kaybolursunuz. Çalışkan adam olsa. Şimdi 20 "+" işareti yazan programı düzelttikten sonra:
3.2.1: Sonucu geçerli olacak ve düzeltilmiş 3 programın hepsinde aynı şeyi çıktı verecek şekilde koda tek bir harf ve başka bir şey eklemeyin. Söylemeye gerek yok, mektup ana eklenmesi} önce olmalıdır (çünkü ben programdan sonra sadece bir mektup koymak ve bir şekilde derleyici çok dostu olduğunu insanlar duymak istemiyorum çünkü).
DÜZENLENMİŞ (aşağıya bakınız) - Bu son sorular için i sayacının 0 yerine -1'den başladığını düşünün.
3.2.1.5: Çıktının en az 19 "+" işareti (ancak yine de sınırlı bir çıktı) olması koşuluyla önceki tüm sorunları tekrarlayın. Alanların değiştirilmesine izin verilir. Şimdi ilk durumdan daha fazla çözüm bulmuş olabilirsiniz. Bunlardan bazıları kesinlikle 3.2.2 sorusuna uyacaktır.
3.2.2: Sonuçta ortaya çıkan çıktının 3.2.1.5'teki en az bir düzeltilmiş program için aynı kalması için n değişkenini başlatmak üzere başka bir değer seçin (hepsi için değil).
SON DÜZENLEME1 : 21 "+" işareti çıkacak şekilde programın değiştirilmesi, orijinal metin "tam olarak" 20 işaretini söylemediği için hala iyi bir çözümdür. Ancak, sonsuz çıktı yasaktır. Açıkçası bu, yasak olmadığı için yüzlerce "+" işareti çıkarmaya başlayacağımız anlamına gelmez. Ancak güzel bir 21 çıktıyı ortadan kaldırmak bu yarışmanın ruhunda olmazdı.
SON DÜZENLEME2: SON DÜZENLEME1'i göz önünde bulundurarak ve yer değiştirmeyi kabul ettiğimizde, dört yanıtta zaten belirtilmiş olan 5 olası çözümümüz var gibi görünüyor. Ancak son zorluğa dokunulmadı ve bir kez daha açıklığa kavuşturmalıyım: n'ye başka bir değer atanmalıdır , bazı numaralarla n'i 20'ye atanan çözümler bunu yapmaz (n = 20L gibi). Ayrıca boşluk değiştirmeyen 3. çözümü görmeyi tercih ediyorum.
SON DÜZENLEME3 : Son soruları düzenledim, lütfen okuyun!
Zor, bulmacanın her iki parçasını da çözmek. Bunu ilk yapan kazanır.
Umarım her şey açıktır, eğer değilse lütfen herhangi bir soru gönderin ve mümkün olduğunca çabuk düzenleyeceğim. Şerefe. vurgulanan metin