मान लीजिए हमें एक बड़ी धनात्मक पूर्णांक संख्या N दी गई है। हमें जांचना है कि क्या हम इसके अंक-क्रमपरिवर्तनों से कोई ऐसी संख्या ढूंढ सकते हैं; जो अपने उल्टे रूप के बराबर हो, यानी पालिंड्रोम हो, और 3 से विभाज्य भी हो।
उदाहरण के लिए, मान लीजिए हमारे पास संख्या 132213 है। यदि हम संख्या के अंकों से क्रमपरिवर्तन जांचते हैं, तो हमें 123321 मिलता है जो एक पालिंड्रोम है और 3 से विभाज्य भी है। हमें जांचना है कि क्या इनपुट संख्या से संभव कोई क्रमपरिवर्तन उपरोक्त शर्तों को पूरा करता है।
इसलिए, यदि इनपुट input_num = 132213 है, तो आउटपुट "One or more permutation is a palindrome and is divisible by three" होगा।
हल करने का तरीका
- digit_array := आकार 10 की सूची 0 से प्रारंभ
- input_sum := 0
- जब तक input_num शून्य नहीं:
- input_sum += input_num % 10
- digit_array[input_num % 10]++
- input_num //= 10
- यदि input_sum % 3 ≠ 0, तो False लौटाएं
- index_odd := 0
- 0 से 9 तक: यदि digit_array[i] विषम है, तो index_odd++
- यदि index_odd > 1, तो "No permutation..." लौटाएं
- अन्यथा "One or more permutation..." लौटाएं
3 से विभाज्यता के लिए अंकों का योग 3 से विभाज्य होना चाहिए। पालिंड्रोम के लिए अधिकतम एक अंक की आवृत्ति विषम हो सकती है।
उदाहरण
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