2010-03-23 12 views
27

मुझे कुछ जटिल सी पहेली के साथ a site मिला। अभी मैं इस से निपट रहा हूं:बिल्कुल एक चरित्र को बदलकर टूटा हुआ लूप फिक्स करना

निम्नलिखित सी कोड का एक टुकड़ा है, जिसका इरादा 20 गुणा चिह्न को मुद्रित करना था। लेकिन आप यह देख सकते हैं कि यह काम नहीं करता है।

#include <stdio.h> 
int main() 
{ 
    int i; 
    int n = 20; 
    for(i = 0; i < n; i--) 
     printf("-"); 
    return 0; 
} 

अच्छी तरह से उपरोक्त कोड को ठीक करना सीधे आगे है। समस्या को दिलचस्प बनाने के लिए, आपको एक वर्ण को बदलकर उपरोक्त कोड को ठीक करना होगा। तीन ज्ञात समाधान हैं। देखें कि क्या आप उन तीनों को प्राप्त कर सकते हैं।

मैं समझ नहीं सकता कि कैसे हल किया जाए। मुझे पता है कि इसे -- से ++ बदलकर तय किया जा सकता है, लेकिन मुझे यह पता नहीं लगाया जा सकता कि यह किस काम को बदलने के लिए बदलता है। मेरी मदद के लिए मार्क करने के लिए धन्यवाद

for(i = 0; -i < n; i--) 
     printf("-"); 

यहाँ एक दूसरे से एक है,:

+1

मुझे नहीं लगता कि यह "बहुत स्थानीय" है। हालांकि यह वास्तविक दुनिया में बहुत उपयोगी नहीं हो सकता है, यह एक दिलचस्प पहेली है। – Javier

+0

बीटीडब्ल्यू, हम अभी भी एक समाधान खो रहे हैं। – Javier

+0

@ फ़ेलिक्स: ठीक है, निश्चित रूप से हम अब नहीं करते हैं। मैंने लिखा था कि जब हम थे। – Javier

उत्तर

34

यहाँ एक हल है!

for(i = 0; i + n; i--) 
    printf("-"); 

और मार्क भी तीसरा जो है

for(i = 0; i < n; n--) 
    printf("-"); 
+1

दूसरा काम नहीं करेगा। आपको '-20, -21, -22, ... 'मिलेगा। लेकिन 'i + n' इसे करना चाहिए। –

+0

दरअसल, मैंने अभी देखा है। –

+4

मुझे लगता है कि दूसरे को 'i-n' की बजाय' i + n' की आवश्यकता है और आपके पास यह है। अच्छा लगा। –

17

बदलें i--n-- के लिए एक और है था।

ठीक है - गैब ने फिक्स किया, इसलिए मैंने दूसरे समाधान को हटा दिया। वह जीत गया!

+0

इस बारे में सोचा नहीं था! –

+0

@ गैब: हे - मुझे खुशी है क्योंकि आपने मुझे एक मिनट से हराया :) –

+0

मैंने दूसरे जवाब को स्वीकार किया क्योंकि इसमें तीनों समाधान शामिल हैं, लेकिन बहुत बहुत धन्यवाद। – Javier

0

यहां उनमें से एक है, मुझे लगता है कि:

for(i = 0; i < n; n--) 
+0

नाइस कैच साथी – MonoThreaded

0

में पाश के लिए किसी भी अभिव्यक्ति हो सकती है तुलना - आप मैं नकारना कर सकते हैं।

for (i = 0; -i < n ; i--) 
7

तीसरा जवाब: प्रेरणा के लिए बकवाद रोयेर को

for(i = 0; i + n; i--) 
    printf("-"); 

धन्यवाद।

स्पष्टीकरण: आखिरकार, i + n परिणामस्वरूप -20 + 20 = 0 होगा जो false है।

+0

2 वर्ण – MonoThreaded

+0

आहा बदल गया, यह चालाक है !! – FrustratedWithFormsDesigner

+0

@ user294702: मेरे पास एक प्रतिलिपि और पेस्ट त्रुटि थी, इसे ठीक किया गया। –

0

समाधान 1

#include <stdio.h> 
int main() 
{ 
    int i; 
    int n = 20; 
    for(i = 0; i < n; n--) // Change i-- to n-- 
     printf("-"); 
    return 0; 
} 

समाधान 2

#include <stdio.h> 
int main() 
{ 
    int i; 
    int n = 20; 
    for(i = 0; -i < n; i--) // Compare to -i 
     printf("-"); 
    return 0; 
} 

एक तिहाई लगा नहीं किया है।

-1

यहाँ एक और एक है:

#include <stdio.h> 

int main() 
{ 
    int i; 
    int n = -20; //make n negative 
    for(i = 0; i < n; i--) 
     printf("-"); 
    return 0; 
} 
+4

यह कभी नहीं चलाएगा, क्योंकि 0> 20. लूप में स्थिति कभी भी सच नहीं होगी। – Javier

संबंधित मुद्दे