কম্পিউটার

সংখ্যার গণনা যেমন সংখ্যা এবং এর সংখ্যার যোগফল C++ এ L এর কম নয়


আমাদের একটি সংখ্যা N এবং আরেকটি সংখ্যা L দেওয়া হয়েছে। লক্ষ্য হল 1 এবং N এর মধ্যে এমন সংখ্যাগুলি খুঁজে বের করা যেগুলির সংখ্যার মধ্যে পার্থক্য রয়েছে এবং এর অঙ্কগুলির যোগফল L-এর চেয়ে কম নয়৷

যদি N=23, L=10 তাহলে এই ধরনের সংখ্যার গণনা হবে 4।

23-(2+3)=18, 22-(2+2)=18, 21-(2+1)=18, 20-(2+0)=18।

উপরের সমস্ত সংখ্যা শর্ত পূরণ করে

কিন্তু 19-(1+9)=9 যা L থেকে কম, একইভাবে 18,17….1.

আসুন উদাহরণ দিয়ে বুঝতে পারি

ইনপুট − N=30 L=19

আউটপুট − সংখ্যার গণনা যেমন সংখ্যা এবং এর সংখ্যার যোগফলের মধ্যে পার্থক্য L-এর চেয়ে কম নয় − 1

ব্যাখ্যা − শুধুমাত্র 30 শর্ত পূরণ করে, 30-(3+0)=27> 19

ইনপুট − N=123330 L=5466

আউটপুট − সংখ্যার গণনা যেমন সংখ্যা এবং এর সংখ্যার যোগফলের মধ্যে পার্থক্য L এর কম নয় − 6841

নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি

বাইনারি অনুসন্ধান ব্যবহার করে আমরা শর্ত পূরণকারী প্রথম সংখ্যাটি খুঁজে পাব। যদি সংখ্যাটি সংখ্যা হয় তবে শর্তটি num+1 এর জন্যও সত্য হবে।

যদি কোনো বর্তমান মধ্য মান শর্তটি সন্তুষ্ট করে তবে মধ্য এবং শেষের মধ্যে সমস্ত সংখ্যাও এই শর্তটি পূরণ করবে যাতে আমরা গণনা করার জন্য কেবলমাত্র শেষ-মধ্য +1 যোগ করতে পারি।

  • লং ভেরিয়েবল হিসাবে num এবং L নিন।

  • ফাংশন Digit_sum(LL num) একটি সংখ্যা সংখ্যা নেয় এবং এর সংখ্যার যোগফল প্রদান করে।

  • মোট =0 হিসাবে প্রাথমিক যোগফল নিন।

  • একটি সময় লুপ ব্যবহার করে, মোটে অনুস্মারক সংখ্যা %10 যোগ করুন এবং সংখ্যা 10 দ্বারা কমিয়ে দিন৷ সংখ্যা>0 পর্যন্ত এটি করুন৷

  • সংখ্যার অঙ্কের যোগফল হিসাবে মোট রিটার্ন করুন।

  • ফাংশন Less_than_L(LL num, LL L) একটি সংখ্যা num এবং একটি সংখ্যা L নেয় এবং সংখ্যার গণনা প্রদান করে যাতে সংখ্যার সংখ্যা এবং যোগফলের মধ্যে পার্থক্য L-এর চেয়ে কম নয়।

  • 0 হিসাবে প্রাথমিক গণনা নিন।

  • যখন লুপ যেখানে start=1 এবং end=num.

    ব্যবহার করে বাইনারি অনুসন্ধান প্রয়োগ করুন
  • temp=(start+end)/2 হিসাবে মধ্যম সংখ্যা গণনা করুন।

  • যদি temp এবং temp-এর অঙ্কের যোগফলের মধ্যে পার্থক্য L-এর কম না হয় তবে temp-এর চেয়ে বড় সমস্ত সংখ্যাও একই শর্ত পূরণ করবে।

  • টেম্প সহ এই ধরনের সংখ্যার সংখ্যা হবে num-temp+1। গণনা করতে এই যোগ করুন. এবং end=temp-1 সেট করুন।

  • অন্যথায় start=temp+1.

    সেট করুন
  • বাইনারি অনুসন্ধান গণনার শেষে তাদের মধ্যে পার্থক্য সহ সংখ্যা থাকবে এবং সংখ্যার যোগফল L

    এর চেয়ে কম নয়
  • ফলাফল হিসাবে রিটার্ন গণনা।

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int Digit_sum(LL num){
   LL total = 0;
   while (num > 0){
      total += num % 10;
      num = num/10;
      z}
   return total;
}
LL Less_than_L(LL num, LL L){
   LL count = 0;
   LL start = 1;
   LL end = num;
   while (start <= end){
      LL temp = (end + start) / 2;
      LL temp_2 = temp - Digit_sum(temp);
      if (temp_2 >= L){
         count = num - temp + 1;
         end = temp - 1;
      }
      else{
         start = temp + 1;
      }
   }
   return count;
}
int main(){
   LL num = 234516;
   LL L = 235;
   cout<<"Count of Numbers such that difference between the number and sum of its digits not
   less than L are: "<< Less_than_L(num, L);
   return 0;
}

আউটপুট

যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট −

উৎপন্ন করবে
Count of Numbers such that difference between the number and sum of its digits not less than L are: 234267

  1. সংখ্যাকে চারটি ভাগে ভাগ করার উপায় খুঁজে বের করুন যেমন C++ এ a =c এবং b =d

  2. একটি সংখ্যায় সংখ্যার গণনা খুঁজুন যা সংখ্যাটিকে C++ এ ভাগ করে

  3. C++ ব্যবহার করে x-এর যোগফল এবং এর অঙ্কগুলো n-এর সমান হয় এমন একটি সংখ্যা খুঁজুন।

  4. x এর সমষ্টি এবং এর সংখ্যা C++ এ দেওয়া n-এর সমান