जब आप एक अंश को दशमलव संख्या में परिवर्तित करते हैं और आप उस संख्या को संग्रहीत करना चाहते हैं, तो आपको अक्सर इसे राउंड करना होता है, क्योंकि आप केवल एक निश्चित मात्रा में मेमोरी का उपयोग करना चाहते हैं। मान लें कि आप केवल 5 दशमलव अंक स्टोर कर सकते हैं, फिर 5/3 1.6667 हो जाता है। यदि आप केवल 2 दशमलव अंक स्टोर कर सकते हैं तो यह 1.7 होगा (अब यह मानते हुए कि यह हमेशा 0 और 9.99 के बीच है ...)।
यदि आप अब 1.7 के साथ उस प्रक्रिया को उलटने की कोशिश करते हैं और आप अपना अंश वापस प्राप्त करना चाहते हैं, तो यह मुश्किल हो सकता है, क्योंकि आप जानते हैं कि 1.7 केवल एक गोल संख्या है। बेशक आप 17/10 की कोशिश कर सकते हैं, लेकिन यह 'सुरुचिपूर्ण' 5/3 की तुलना में एक 'बदसूरत' अंश है।
तो लक्ष्य अब अंश को सबसे कम हर बी के साथ a / b ढूंढ रहा है, जिसके परिणामस्वरूप गोल दशमलव संख्या सही ढंग से गोल होने पर होती है।
विवरण
इनपुट में 1 से 5 अंकों की संख्या के साथ एक स्ट्रिंग होती है जो 0 (सहित) और 10 के बीच होती है (एक के साथ शामिल नहीं)। ' पहले अंक के बाद। मान लीजिए कि n
अंकों की संख्या को दर्शाता है। आउटपुट दो पूर्णांकों की एक सूची / सरणी [numerator, denominator]
या एक तर्कसंगत डेटाटाइप होना चाहिए (आप अपना खुद का बना सकते हैं या अंतर्निहित उपयोग कर सकते हैं) जहां अंश गैर-ऋणात्मक है और भाजक धनात्मक है। अंश संख्यात्मक (हर) को इनपुट के बराबर होना चाहिए जब सही ढंग से n
अंकों के लिए गोल किया जाए (जिसका अर्थ हैn-1
दशमलव बिंदु के बाद अंकों का हो) के ।
प्रतिबंध: केवल एक लूप स्टेटमेंट की अनुमति है। इसका मतलब है कि आप केवल एक ही लूपिंग स्टेटमेंट (जैसे for
या while
या goto
आदि) और साथ ही कार्यात्मक लूप का उपयोग map
कर सकते हैंfold
अपने पूरे कोड में जो किसी सूची / सरणी के प्रत्येक तत्व पर कोड लागू कर सकते हैं, लेकिन आप इसे 'दुरुपयोग' के लिए स्वतंत्र हैं। या पुनरावर्तन आदि का उपयोग करें
आपको एक फंक्शन लिखना चाहिए। यदि आपकी भाषा में फ़ंक्शन नहीं हैं (या यहां तक कि अगर यह करता है), तो आप वैकल्पिक रूप से मान सकते हैं कि इनपुट एक चर (या स्टड के माध्यम से इनपुट) में संग्रहीत है और परिणाम प्रिंट करें या इसे एक फ़ाइल में लिखें। सबसे कम बाइट्स जीतती है।
गोलाई
राउंडिंग को 'पारंपरिक' राउंडिंग नियमों का पालन करना चाहिए, अर्थात यदि अंतिम अंक जो कट जाएगा, वह 5 या अधिक होगा, तो आप राउंड अप करेंगे, और आप किसी भी अन्य मामलों के लिए राउंड डाउन करेंगे, इसलिए जैसे:
४.५४ ९ ४ परिणाम देगा जब गोलाई
- 1 अंक: 5
- 2 अंक: 4.5
- 3 अंक: 4.55
- 4 अंक: 4.549
उदाहरण
कृपया निम्नलिखित परीक्षण मामलों और अन्य 'दिलचस्प' को शामिल करें:
Input 1.7 Output 5/3
Input 0. Output 0/1
Input 0.001 Output 1/667
Input 3.1416 Output 355/113
for n in numbers: f(g(n))
बराबर है map(f, map(g, numbers))
। कार्यात्मक संस्करण map
दो बार उपयोग करता है , क्या यह वास्तव में अस्वीकृत होना चाहिए?
repeat
अपने तर्क की एक अनंत सूची बनाता है। मुझे लूप लगता है लेकिन इसमें वास्तव में O (1) की समय जटिलता है। लेकिन मुझे लगता है कि प्रत्येक मामले को व्यक्तिगत रूप से सॉर्ट करना कार्यात्मक भाषाओं की अनुमति नहीं देने से बेहतर है।