কম্পিউটার

একটি সংখ্যাকে C++ এ 6 দ্বারা বিভাজ্য করার জন্য মুদ্রণের অঙ্কের অবস্থান মুছে ফেলতে হবে


এই সমস্যায়, আমাদের নম্বর দেওয়া হয় এবং আমাদের নম্বর থেকে আরও সংখ্যা বাদ দিতে হয়। যাতে অপসারণের পরে গঠিত নতুন সংখ্যাটি 6 দ্বারা বিভাজ্য হয়।

ধারণাটি আরও ভালভাবে শিখতে একটি উদাহরণ নেওয়া যাক −

Input : 1324
Output : 4

ব্যাখ্যা − ৪র্থ সংখ্যাটি মুছে দিলে আমরা 132 পাব যা 6 দ্বারা বিভাজ্য।

এখানে, আমাদের একটি সংখ্যা দেওয়া হয়েছে এবং আমাদেরকে সেই অবস্থানটি ফিরিয়ে দিতে হবে যেখান থেকে সংখ্যাটিকে 6 দ্বারা বিভাজ্য করার জন্য সরানো হয়েছে৷

এই সমস্যাটি সমাধানের জন্য, আমরা একটি যুক্তি তৈরি করার চেষ্টা করব যা সমস্যার সমাধান করে। এর জন্য, আমরা আমাদের জ্ঞান ব্যবহার করব যে যদি একটি সংখ্যা 2 এবং 3 দ্বারা বিভাজ্য হয় তবে এটি 6 দ্বারা বিভাজ্য।

সংখ্যা থেকে অঙ্কটি মুছে ফেলার পরে গঠিত নতুন সংখ্যাটি 6 এর বিভাজ্যতার জন্য পরীক্ষা করা হবে অর্থাৎ 2 এবং 3 উভয়ের বিভাজ্যতা।

পন্থা

সংখ্যার উপর ভিত্তি করে আমরা খুঁজে বের করতে পারি যে একটি অঙ্ক সরিয়ে দিয়ে তৈরি করা সংখ্যাটি 6 দ্বারা বিভাজ্য হবে কি না। সংখ্যাটির শেষ সংখ্যাটি দেখলে দুটি অবস্থার সৃষ্টি হয়।

যখন শেষ অঙ্কটি বিজোড় হয়

যখন শেষ অঙ্কটি বিজোড় হয় তখন একমাত্র উপায় হল শেষ অঙ্কটি সরানো। এবং নতুন সংখ্যাটি 6 দ্বারা বিভাজ্য হবে না শুধুমাত্র যদি শেষ অঙ্কের পাশের অঙ্কটি জোড় হয়। অন্যথায়, সমাধান সম্ভব নয়।

যখন শেষ অঙ্ক জোড় হয়

যদি শেষ সংখ্যাটি জোড় হয় তাহলে সংখ্যাটিকে 3 দ্বারা ভাগ করলে আমাদের অবশিষ্টটি খুঁজে বের করতে হবে। এবং এই সংখ্যার ভিত্তিতে আমরা পরীক্ষা করতে পারি কোন সংখ্যাটি সরানো যেতে পারে।

সংখ্যাটিকে 3 দ্বারা ভাগ করলে তিনটি ক্ষেত্রে −

অবশিষ্ট হল 1 − যদি ভাগের অবশিষ্টাংশ 1 হয় তাহলে 1, 4, 7 সংখ্যার যেকোনো একটি অ্যারে থেকে সরানো যেতে পারে। যদি একাধিক সংখ্যা মুছে ফেলার জন্য উপলব্ধ থাকে তবে আমরা এমনভাবে অঙ্কটি সরিয়ে দেব যাতে অপসারণের পরে গঠিত সংখ্যাটি সবচেয়ে বড় হয়৷

অবশিষ্ট হল 2 − যদি ভাগের অবশিষ্টাংশ 2 হয় তাহলে 2, 5, 8 সংখ্যার যেকোনো একটি অ্যারে থেকে সরানো যেতে পারে। যদি একাধিক সংখ্যা মুছে ফেলার জন্য উপলব্ধ থাকে তবে আমরা এমনভাবে অঙ্কটি সরিয়ে দেব যাতে সরানোর পরে গঠিত সংখ্যাটি সবচেয়ে বড় হয়৷

অবশিষ্ট হল 3 − যদি ভাগের অবশিষ্টাংশ 1 হয় তাহলে 3, 6, 9 সংখ্যার যেকোনো একটি অ্যারে থেকে সরানো যেতে পারে। যদি একাধিক সংখ্যা মুছে ফেলার জন্য উপলব্ধ থাকে তবে আমরা এমনভাবে অঙ্কটি সরিয়ে দেব যাতে সরানোর পরে গঠিত সংখ্যাটি সবচেয়ে বড় হয়৷

এর উপর ভিত্তি করে চলুন কয়েকটি সমস্যার সমাধান করি এবং পছন্দসই আউটপুট −

খুঁজে বের করি

যখন শেষ অঙ্কটি বিজোড় হয়

1. 34241341

এই ক্ষেত্রে, শেষ অবস্থান থেকে একমাত্র অঙ্কটি 1টি সরানো যেতে পারে এবং গঠিত সংখ্যাটি হবে 3432134 যা 6 দ্বারা বিভাজ্য। সুতরাং, আমরা 1 সরানো অর্থাৎ 8

এর অবস্থান ফিরিয়ে দেব।

2. 3214241

এই ক্ষেত্রে, শেষ অবস্থান থেকে 1টি সরানো যেতে পারে এবং গঠিত সংখ্যাটি হবে 341224৷ যা 6 দ্বারা বিভাজ্য নয়৷ তাই, আমরা -1 ফেরত দেব৷

যখন শেষ অঙ্ক জোড় হয়

1. 8097860

এই ক্ষেত্রে, আমাদের সংখ্যাটিকে 3 দ্বারা ভাগ করতে হবে এবং অবশিষ্টটি খুঁজে বের করতে হবে যা 2 এর সমান। সুতরাং, 2 এর ক্ষেত্রে অবশিষ্টাংশ হিসাবে, আমরা সংখ্যা থেকে 2, 5, 8 বাদ দিতে পারি। সুতরাং, 1 অবস্থান থেকে 8 এবং 5 নম্বরটিকে 2 দ্বারা বিভাজ্য করার জন্য বাদ দেওয়া যেতে পারে। আমরা 5 তম অবস্থান থেকে 8 বাদ দেব কারণ আমরা এটিকে 1 ম অবস্থান থেকে সরিয়ে দিলে আরও ছোট সংখ্যাটি ফিরে আসবে। গঠিত নতুন সংখ্যাটি হবে 809760 যা 6 দ্বারা বিভাজ্য। সুতরাং, আমরা 5 ফেরত দেব।

উদাহরণ

এই যুক্তির উপর ভিত্তি করে সমস্যা সমাধানের জন্য একটি প্রোগ্রাম তৈরি করতে দেয় -

#include <bits/stdc++.h>
using namespace std;
void isDivisibleBy6(string num){
   int n = num.length();
   int a[n];
   int sum = 0;
   for (int i = 0; i < n; i++) {
      a[i] = num[i] - '0';
      sum += a[i];
   }
   if (a[n - 1] % 2){
      if ( (a[n - 2] % 2 != 0) || (sum - a[n - 1]) % 3 != 0) {
         cout << "-1" << endl;
      }
      else {
         cout << n << endl;
      }
   }
   else {
      int re = sum % 3;
      int del = -1;
      int flag = 0;
      for (int i = 0; i < n - 1; i++) {
         if ((a[i]) % 3 == re) {
            if (a[i + 1] > a[i]) {
               del = i;
               flag = 1;
               break;
            }
            else {
               del = i;
            }
         }
      }
      if (flag == 0) {
         if (a[n - 2] % 2 == 0 and re == a[n - 1] % 3)
            del = n - 1;
      }
      if (del == -1)
         cout << -1 << endl;
      else {
         cout << del + 1 << endl;
      }
   }
}
int main(){
   string number = "343224152";
   isDivisibleBy6(number);
   return 0;
}

আউটপুট

5

  1. X দ্বারা বিভাজ্য বৃহত্তম K সংখ্যার জন্য C++ প্রোগ্রাম?

  2. X দ্বারা বিভাজ্য ক্ষুদ্রতম K সংখ্যার সংখ্যার জন্য C++ প্রোগ্রামিং?

  3. X দ্বারা বিভাজ্য বৃহত্তম K সংখ্যার সংখ্যার জন্য C++ প্রোগ্রাম?

  4. X দ্বারা বিভাজ্য ক্ষুদ্রতম K সংখ্যা সংখ্যার জন্য C++ প্রোগ্রাম?