परिचय
आइए निम्नलिखित अनुक्रम (गैर-नकारात्मक पूर्णांक) देखें:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ...
उदाहरण के लिए, पहले तीन संख्याएँ लेते हैं । ये हैं 0, 1, 2
। इस क्रम में प्रयुक्त संख्याओं को छह अलग-अलग तरीकों से क्रमबद्ध किया जा सकता है:
012 120
021 201
102 210
तो, मान लीजिए कि एफ (3) = 6 । एक और उदाहरण एफ (12) है । इसमें नंबर शामिल हैं:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
या संक्षिप्त संस्करण:
01234567891011
इसे पुनर्व्यवस्थित करने के तरीकों की संख्या का पता लगाने के लिए, हमें सबसे पहले इस तार की लंबाई को देखना होगा। इस तार की लंबाई है 14
। तो हम 14 की गणना करते हैं ! । हालाँकि, उदाहरण के लिए अंतिम स्थानों को बाधित किए बिना स्थानों का आदान-प्रदान कर सकते हैं। 2 शून्य हैं, इसलिए 2 हैं! आदेश को बाधित किए बिना शून्य को बाहर निकालने के तरीके । वहाँ भी 4 हैं, इसलिए 4 हैं!लोगों को स्विच करने के तरीके। हम कुल को इन दो संख्याओं से विभाजित करते हैं:
यह 14 है! / (4! × 2!) = 1816214400 स्ट्रिंग को व्यवस्थित करने के तरीके 01234567891011
। तो हम यह निष्कर्ष निकाल सकते हैं कि F (12) = 1816214400 ।
काम
दिए गए एन , आउटपुट एफ (एन) । उन लोगों के लिए जिन्हें परिचय की आवश्यकता नहीं है। एफ (एन) की गणना करने के लिए, हम पहले पहले एन गैर-नकारात्मक पूर्णांक (जैसे एन = 12 के लिए, संक्षिप्त स्ट्रिंग होगा 01234567891011
) को संक्षिप्त करते हैं और इस स्ट्रिंग को व्यवस्थित करने के तरीकों की संख्या की गणना करते हैं।
परीक्षण के मामलों
Input: Output:
0 1
1 1
2 2
3 6
4 24
5 120
6 720
7 5040
8 40320
9 362880
10 3628800
11 119750400
12 1816214400
13 43589145600
14 1111523212800
15 30169915776000
ध्यान दें
उत्तर की गणना 10 सेकंड की समय सीमा के भीतर की जानी चाहिए , ब्रूट-फोर्सिंग को रोक दिया गया है ।
यह कोड-गोल्फ है , इसलिए कम से कम बाइट्स जीत के साथ सबमिशन!
10
अंक हैं 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
। दस अलग-अलग अंक, इसलिए परिणाम 10 है!
0
मामला मेरी गिनती बंद कर रहा था (बेवकूफ खाली तार)।
F(N)
ऐसा नहीं है O(N!)
और यह log F(N)
है, O(log N!)
लेकिन वे सिर्फ hunches हैं ...
10
सही है? ऐसा लगता है कि इसे 10 से कम होना चाहिए!, क्योंकि यह दोहराव अंक शुरू होता है।