मान लीजिए, कई छात्र समूह अपने कॉलेज से कॉलेज बस के माध्यम से अपने घर वापस जाने की प्रतीक्षा कर रहे हैं। प्रत्येक छात्र समूह में छात्रों की संख्या m है। छात्र समूह अलग हुए बिना बस से यात्रा करना चाहते हैं। वे बस में तभी चढ़ते हैं जब उनके समूह के सभी सदस्य बस में चढ़ सकते हैं। इसके अलावा, एक समूह बस में नहीं चढ़ता है यदि उनका पिछला समूह बस में नहीं चढ़ा है या पहले ही अपने गंतव्य तक पहुँच चुका है। यदि हमें समूहों की संख्या और प्रत्येक समूह में छात्रों की संख्या दी जाती है, तो हमें बस के आकार का पता लगाना होगा ताकि बस सभी समूहों को ले जा सके, और हर बार जब बस कॉलेज से शुरू होती है तो कोई खाली जगह नहीं होती है। बस में।
इसलिए, यदि इनपुट समूह या gr_no =[3, 4, 2, 2, 1, 4, 3, 5] जैसा है, तो आउटपुट [12, 24] होगा।
अगर बस का आकार 12 है, तो इसमें पहली यात्रा पर समूह 1 - 5 और दूसरी यात्रा पर बाकी समूह शामिल हो सकते हैं।
यदि बस का आकार 24 है, तो इसमें सभी समूह शामिल हो सकते हैं और उन्हें केवल एक यात्रा पर ले जाया जा सकता है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- फ़ंक्शन को परिभाषित करें factor_ret() । इसमें n
- . लगेगा
- मैं श्रेणी में (0 से n ^ 0.5), करो
- यदि n mod i 0 के समान है, तो
- output_list में एक टपल (i, फ्लोर वैल्यू (n/i)) जोड़ें
- यदि n mod i 0 के समान है, तो
- सूची को क्रमबद्ध करें output_list
- एक सेट के रूप में output_list लौटाएं
- मैं श्रेणी में (0 से n ^ 0.5), करो
- अब निम्न चरणों का पालन करें -
- कुल:=एक नई सूची जिसमें आइटम gr_no[0] . है
- 1 से लेकर gr_no के आकार तक के लिए, करें
- कुल डालें[i - 1] + gr_no[i] कुल के अंत में
- b_sizes:=एक नई सूची
- factor_ret में प्रत्येक आकार के लिए (सूची का योग (gr_no)), करें
- temp_list :=कुल में से सभी गैर-शून्य तत्वों की एक नई सूची
- सूचकांक:=1
- संकेतक:=सत्य
- temp_list में प्रत्येक बिंदु के लिए, करें
- यदि बिंदु आकार * सूचकांक के समान नहीं है, तो
- संकेतक:=गलत
- लूप से बाहर आएं
- सूचकांक :=अनुक्रमणिका + 1
- यदि बिंदु आकार * सूचकांक के समान नहीं है, तो
- यदि संकेतक सही है, तो
- b_sizes के अंत में आकार डालें
- ब_आकार लौटाएं
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
from functools import reduce def solve(gr_no): total = [gr_no[0]] for i in range(1, len(gr_no)): total.append(total[i - 1] + gr_no[i]) b_sizes = [] for size in factor_ret(sum(gr_no)): temp_list = list(filter(lambda x : x % size == 0, total)) index = 1 indicator = True for point in temp_list: if point != size * index: indicator = False break index += 1 if indicator: b_sizes.append(size) return b_sizes def factor_ret(n): return sorted(set(reduce(list.__add__, ([i, n//i] for i in range(1, int(n**0.5) + 1) if n % i == 0)))) print(solve([3, 4, 2, 2, 1, 4, 3, 5]))
इनपुट
[3, 4, 2, 2, 1, 4, 3, 5]
आउटपुट
[12, 24]