मान लीजिए, हमें एक बड़ी धनात्मक पूर्णांक संख्या N प्रदान की गई है। हमें यह जांचना है कि क्या हम किसी संख्या को उसके अंकों के क्रमपरिवर्तन से ज्ञात कर सकते हैं; ऐसा है कि क्रमपरिवर्तन इसके विपरीत रूप के बराबर है, यानी इसका पैलिंड्रोम, और 3 से भी विभाज्य है।
उदाहरण के लिए, मान लीजिए कि हमारे पास संख्या 132213 है। यदि हम संख्या के अंकों से क्रमपरिवर्तन की जाँच करते हैं, तो हमें 123321 मिलता है जो एक पैलिंड्रोम है और 3 से भी विभाज्य है। हमें यह जाँचना है कि इनपुट संख्या से कोई क्रमपरिवर्तन संभव है या नहीं। उपरोक्त शर्तों को पूरा करें।
इसलिए, यदि इनपुट इस प्रकार है:input_num =132213, तो आउटपुट "एक या अधिक क्रमपरिवर्तन एक पैलिंड्रोम है और तीन से विभाज्य है" होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- digit_array :=आकार 10 की एक नई सूची 0s के साथ आरंभ की गई
- इनपुट_सम:=0
- जबकि input_num शून्य नहीं है, करें
- input_sum :=input_sum + (input_num mod 10)
- digit_array[input_num mod 10]:=digit_array[input_num mod 10] + 1
- input_num :=का न्यूनतम मान (input_num / 10)
- यदि input_sum mod 3 0 के समान नहीं है, तो
- झूठी वापसी
- index_odd :=0
- 0 से 9 की श्रेणी में i के लिए, करें
- यदि digit_array[i] mod 2 0 के समान नहीं है, तो
- index_odd :=index_odd + 1
- यदि digit_array[i] mod 2 0 के समान नहीं है, तो
- अगर index_odd> 1, तो
- वापसी "कोई क्रमपरिवर्तन पैलिंड्रोम नहीं है और तीन से विभाज्य है"
- अन्यथा,
- वापसी "एक या अधिक क्रमपरिवर्तन एक पैलिंड्रोम है और तीन से विभाज्य है"
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
def solve(input_num): digit_array = [0] * 10 input_sum = 0 while (input_num) : input_sum += input_num % 10 digit_array[input_num % 10] += 1 input_num //= 10 if (input_sum % 3 != 0): return False index_odd = 0 for i in range(10) : if (digit_array[i] % 2 != 0): index_odd += 1 if (index_odd > 1): return "No permutation is a palindrome and is divisible by three" else: return "One or more permutation is a palindrome and is divisible by three" input_num = 132213 print(solve(input_num))
इनपुट
132213
आउटपुट
One or more permutation is a palindrome and is divisible by three