ধরুন, আমাদের একটি বড় ধনাত্মক পূর্ণসংখ্যা N প্রদান করা হয়েছে। আমাদের পরীক্ষা করতে হবে যে আমরা এর সংখ্যা-ক্রমানুবর্তন থেকে একটি সংখ্যা বের করতে পারি কিনা; যাতে স্থানচ্যুতি তার বিপরীত রূপের সমান, অর্থাৎ এর প্যালিনড্রোম, এবং এটি 3 দ্বারা বিভাজ্য।
উদাহরণস্বরূপ, ধরুন আমাদের সংখ্যাটি 132213 আছে। যদি আমরা সংখ্যার অঙ্কগুলি থেকে স্থানান্তরগুলি পরীক্ষা করি, তাহলে আমরা 123321 পাব যা একটি প্যালিনড্রোম এবং এটি 3 দ্বারা বিভাজ্যও। ইনপুট নম্বর থেকে কোনো পারমুটেশন সম্ভব কিনা তা আমাদের পরীক্ষা করতে হবে। উপরের শর্তগুলো পূরণ করুন।
সুতরাং, যদি ইনপুটটি হয়:input_num =132213, তাহলে আউটপুট হবে "এক বা একাধিক স্থানান্তর একটি প্যালিনড্রোম এবং তিনটি দ্বারা বিভাজ্য"।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- ডিজিট_অ্যারে :=0s দিয়ে শুরু করা 10 আকারের একটি নতুন তালিকা
- input_sum :=0
- যদিও ইনপুট_সংখ্যা শূন্য নয়, কর
- 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 রেঞ্জের জন্য, কর
- যদি 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