मैं वर्तमान को सुलझाने कर रहा हूँ, Project Euler problem 14:परियोजना यूलर # 14
निम्नलिखित पुनरावृत्ति अनुक्रम सकारात्मक पूर्णांकों का सेट के लिए परिभाषित किया गया है:
n → n/2 (n is even) n → 3n + 1 (n is odd) Using the rule above and starting with 13, we generate the following sequence: 13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1 Which starting number, under one million, produces the longest chain?
मैं हल करने के लिए निम्नलिखित एल्गोरिथम तैयार समस्या:
- के बजाय ईए के लिए श्रृंखला की खोज ch संख्या अलग से, जिसमें बहुत सी अनावश्यक गणना होगी, मैं श्रृंखला को पीछे से आगे विकसित करने का प्रयास करता हूं। यानी, संख्या से शुरू करें और इससे पहले तत्व की भविष्यवाणी करें।
- चूंकि कई श्रृंखलाएं उत्पन्न की जा सकती हैं, इसलिए एक लिंक की गई सूची का उपयोग करके सभी श्रृंखलाओं की हाल की संख्या को स्टोर करें। (विचार केवल उन तत्वों को स्टोर करना है जिनमें लंबी श्रृंखला है।)
- मैं इसे लूप कर दूंगा, जब तक कि मुझे दी गई सीमा के तहत सभी संख्याएं न मिलें; सीमा के तहत अंतिम संख्या में सबसे लंबी श्रृंखला होगी।
void series_generate(long num) { long n = 1; addhead(n); //add 1 to list. while (n < num) { series *p; for (p = head; p != NULL; p = p->next) { long bf = p->num - 1; if (p->num%2 == 0 && bf != 0 && bf%3 == 0) { bf /= 3; if (bf != 1) addhead(bf); if (bf < num) n++; } p->num *= 2; if (p->num < num) n++; } } }
Here is the link to complete code. हालांकि, मैं जवाब के रूप में मैं उम्मीद नहीं मिलता:
यहाँ मेरी कोड है। क्या कोई यह बता सकता है कि यह एल्गोरिदम क्यों काम नहीं करेगा?
आपका एल्गोरिदम वापस क्या करता है और यह आपकी अपेक्षाओं से अलग कैसे होता है? – gary
आपको पहली पंक्ति को खोजने के लिए अपने प्रोग्राम लाइन-दर-लाइन के माध्यम से कदम उठाने के लिए डीबगर का उपयोग करना चाहिए, जिसका व्यवहार आपके इच्छित उद्देश्य से अलग हो जाता है। –
मैंने ब्रूट फोर्स का उपयोग कर समस्या के उत्तर की गणना की। मुझे उम्मीद है कि 83779 9 – mohit