यह C / C ++ पहेली की मेरी श्रृंखला का तीसरा है; यदि आप पहले 2 से चूक गए तो वे यहां हैं: (1) m3ph1st0s की प्रोग्रामिंग पहेली 1 (C ++) (2) m3ph1st0s की प्रोग्रामिंग पहेली 2 (C ++): "कॉल हार्ड!"
मुझे कहना होगा कि मेरी पहेलियाँ 100% मूल हैं। यदि नहीं, तो मैं हमेशा पाठ में ऐसा लिखूंगा। मेरी तीसरी पहेली के 2 भाग हैं:
पहेली 3.1
यह हिस्सा (3.1) मेरी एक मूल पहेली नहीं है, यह कुछ इंटरनेट पेज से एकत्र किया गया है जिसे मैंने कुछ समय पहले पढ़ा है। मैं इसे एक शुरुआती बिंदु और आपके लिए एक वार्म-अप के रूप में उपयोग करता हूं। इस एक को हल करें और फिर 2 भाग पर जाएं।
कुछ लोगों ने 20 बार "+" चिन्ह छापने की कोशिश की और निम्नलिखित कार्यक्रम के साथ आए:
#include <stdio.h>
int main() {
int i;
int n = 20;
for( i = 0; i < n; i-- )
printf("+");
return 0;
}
तथ्य यह है कि यह अपेक्षित परिणाम नहीं था स्पष्ट है - कार्यक्रम कभी समाप्त नहीं होता है। इसे ठीक करो! आसान? अब केवल एक चरित्र बदलकर कार्यक्रम को ठीक करें - निश्चित रूप से गैर-अंतरिक्ष चरित्र! इस चुनौती के लिए 3 समाधान हैं। उनमें से सभी 3 खोजें। बस इसे स्पष्ट करने के लिए: कार्यक्रम को 20 "+" संकेतों का उत्पादन करना चाहिए और तेजी से समाप्त होना चाहिए। "तेज़" का मतलब क्या है, इस पर मेरी आलोचना करने से पहले, मैं कहूंगा कि इसका मतलब है कि कुछ सेकंड में (जो वैसे भी बहुत अधिक है, लेकिन सिर्फ इसे स्पष्ट करने के लिए)।
पहेली 3.2
EDITED यह मुझे पहले बताया गया था कि 3.2.2 पहेली के लिए समाधान संकलक-निर्भर हो सकता है। इस विषय पर किसी भी संभावित चर्चा को खत्म करने के लिए, मैं इस विचार को संशोधित करूंगा और अगली पहेली पर इसे सुधारूंगा जब मैं विवाद उत्पन्न नहीं करने के लिए अतिरिक्त ध्यान रखूंगा। हालाँकि, इस पहेली को जारी रखने के लिए, मैं 3.2.2 के लिए एक छोटा संशोधन करूँगा (समाधान आसान लेकिन क्लीनर होगा)।
जब मैंने पहली बार पहेली देखी तो मुझे यह बहुत बढ़िया लगा। मैंने इसे हल करने का प्रबंधन किया, लेकिन तुरंत नहीं क्योंकि इसके लिए कुछ सावधान ध्यान देने की आवश्यकता है। यदि आप यहां हैं तो इसका मतलब है कि आपने इसे भी हल कर लिया है। यदि आपने सभी संभावित मूल्यों के साथ सभी संभावित पात्रों को बदलने और हर समाधान का परीक्षण करने के लिए एक प्रोग्राम लिखकर ऐसा किया है, तो आप खो गए हैं। हालांकि कड़ी मेहनत करने वाला लड़का। अब 20 "+" संकेत लिखने वाले प्रोग्राम को ठीक कर रहा है:
३.२.१: कोड में एक भी अक्षर और कुछ भी नहीं डालें ताकि परिणाम मान्य हो और सभी ३ सही किए गए कार्यक्रमों में एक ही चीज़ का आउटपुट हो। कहने की जरूरत नहीं है, पत्र मुख्य के संलग्नक} से पहले होना चाहिए (मैं कहता हूं कि क्योंकि मैं ऐसे लोगों को नहीं सुनना चाहता जो सिर्फ कार्यक्रम के बाद एक पत्र डालते हैं और किसी तरह उनका संकलक बहुत अनुकूल था)।
EDITED (bellow देखें) - इन अंतिम प्रश्नों के लिए विचार करें कि काउंटर I 0 के बजाय -1 से शुरू होता है।
३.२.१.५: पिछली सभी समस्याओं को इस शर्त के साथ दोहराएं कि आउटपुट कम से कम १ ९ "+" संकेत (लेकिन अभी भी एक परिमित आउटपुट है)। रिक्त स्थान बदलने की अनुमति है। अब आपको पहले मामले की तुलना में अधिक समाधान मिल सकता है। इनमें से कुछ निश्चित रूप से 3.2.2 प्रश्न के लिए फिट होंगे।
3.2.2: वैरिएबल n को इनिशियलाइज़ करने के लिए एक और वैल्यू चुनें ताकि परिणामस्वरूप आउटपुट 3.2.1.5 में कम से कम एक सही प्रोग्राम के लिए समान रहे (जरूरी नहीं कि सभी के लिए)।
LAST EDIT1 : प्रोग्राम को बदलना ताकि यह 21 "+" संकेतों का उत्पादन करता है, अभी भी एक अच्छा समाधान है, क्योंकि मूल पाठ ने "बिल्कुल" 20 संकेतों को नहीं कहा था। हालांकि, अनंत उत्पादन निषिद्ध है। स्पष्ट रूप से इसका मतलब यह नहीं है कि सभी सैकड़ों "+" संकेतों का उत्पादन शुरू करते हैं क्योंकि यह निषिद्ध नहीं है। लेकिन एक सुंदर 21 आउटपुट को खत्म करना इस प्रतियोगिता की भावना में नहीं होगा।
LAST EDIT2 : LAST EDIT1 पर विचार करने और स्थान बदलने को स्वीकार करने से ऐसा लगता है कि अब हमारे पास 5 संभावित समाधान हैं, जिनमें से चार को पहले ही प्रतिक्रियाओं में इंगित किया गया है। हालांकि अंतिम चुनौती को छुआ नहीं गया है और मुझे इसे एक बार फिर स्पष्ट करना होगा : n को एक और मान सौंपा जाना चाहिए , कुछ ट्रिक्स द्वारा 20 से n असाइन करने वाले समाधान ऐसा नहीं करेंगे (जैसे n = 20L)। इसके अलावा, मैं उन 3 समाधानों को देखना पसंद करता हूं जो रिक्त स्थान नहीं बदलते हैं।
पिछले EDIT3 : मैंने पिछले प्रश्नों को संपादित किया है, कृपया पढ़ें!
पहेली के दोनों हिस्सों को हल करना चुनौती है। यह करने वाला पहला जीतता है।
मुझे आशा है कि यह सब स्पष्ट है, यदि कोई प्रश्न पोस्ट नहीं करते हैं और मैं जितनी जल्दी हो सके संपादित करूंगा। चीयर्स। पाठ पर बल दिया