2011-09-25 6 views
5

के लिए अनुकूलित समाधान दिन के दौरान एक घोंघा एक दीवार को एक फीट ऊपर चलाता है। पूरे श्रम के बाद यह पूरे दिन करता है, यह थोड़ी देर आराम करता है ... लेकिन सो जाता है !! अगली सुबह यह उठता है और पता चलता है कि यह सोते समय वाई फीट नीचे फिसल गया है।मेरे होमवर्क

यदि यह हर दिन होता है, तो कितनी बार घोंघा अलग-अलग ऊंचाई की दीवारों को कवर करने के लिए रेंगती है?

मैं जैसा कि नीचे दिखाया घोंघा की ढोंगी की संख्या की गणना करने के लिए एक समारोह में लिखा है:

void count(int move_forward, int move_backward, int number_walls, int[] height) 
    { 
     int count = number_walls, diff = move_forward - move_backward; 
     while (number_walls--) 
      for (move_backward = move_forward; move_backward < height[number_walls]; move_backward += diff) 
       count++; 
    } 

यह ठीक काम कर रहा है। लेकिन मैं जानना चाहता था कि प्रोग्राम की गति को और अनुकूलित करने के लिए इस समस्या को हल करने का कोई और तरीका है या नहीं।

+3

(ऊंचाई-x)/(x-y) +1, कोई लूप आवश्यक नहीं – amit

+2

@ जे, बीटीडब्ल्यू - सार्थक चर नामों के उपयोग के बारे में प्रारंभिक प्रश्न में प्राप्त सलाह आंतरिक लूप के संदर्भ में बहस योग्य है। बहुत सारे, बहुत लंबे नाम आपके कोड को क्रिप्टिक एक और दो अक्षर नामों के समूह के रूप में अपठनीय के रूप में हर बिट बनाते हैं। यह सब संतुलन के बारे में है। – dmckee

+1

जब तक मैं अपनी नाक चिपका रहा हूं, तब तक एक और टिप्पणी। इस अभ्यास का बिंदु आपको थोड़ा सा बैठने और सोचने के लिए हो सकता है कि आप 'ओ (ऊंचाई)' से अलग दीवारों की समस्या कर सकते हैं (जिस तरह से आप इसे आजमा रहे थे) 'ओ (1)' (जिस तरह से अमित इसे हल करता है)। – dmckee

उत्तर

7

समाधान ((height-x)/(x-y))+1 है, कोई लूप आवश्यक नहीं है।

घोंघा को चढ़ने की आवश्यकता है: height-x, और यह उसे ((height-x)/(x-y)) दिन लेता है। एक बार यह वहां पहुंचने के बाद, उसे शेष एक्स पर चढ़ने के लिए एक अतिरिक्त दिन लगता है।

संपादित करें: के रूप में टिप्पणी में उल्लेख किया है, इस समाधान प्रत्येक दीवार के लिए समस्या का हल, आप अपने heights सरणी पर पुनरावृति, और इन परिणामों संक्षेप में प्रस्तुत करने के लिए, आप कम से कम भीतरी पाश बचत, जिससे यह आवश्यकता होगी हे (एन), इसके बजाय ओ (एन * एच), जहां एन दीवारों की संख्या है, और एच दीवारों की ऊंचाई है।

(*) नोट: कि आप प्रत्येक दीवार के लिए अनुस्मारक को सहेजना चाहेंगे [यानी। इस दीवार को पार करने के बाद घोंघा कितना जा सकता है], और इसे अगली दीवार से घटाएं, कार्य विवरण पर निर्भर करता है ... यदि घोंघा प्रति दिन अधिकतम एक दीवार पास कर सकता है, तो इस अंतिम टिप्पणी को अनदेखा करें।

+0

डाउनवॉटर विस्तृत होगा? – amit

+2

मैं डाउनवॉटर नहीं हूं, लेकिन मुझे लगता है कि यह इसलिए है क्योंकि ऊंचाई मानों की एक सरणी है। कुल ऊंचाई प्राप्त करने या प्रत्येक ऊंचाई पर समाधान लागू करने के लिए आपको अभी भी एक लूप की आवश्यकता होगी। – tinman

+0

@ टिनमैन: आप सही हैं, यह उत्तर दिखाता है कि इसे एक दीवार के लिए कैसे करना है, मैं इसे स्पष्ट रूप से उल्लेख करूंगा। टिप्पणी के लिए धन्यवाद। – amit

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