কম্পিউটার টিউটোরিয়াল

C++-এ N থেকে ১ যোগ করে এবং ট্রেলিং জিরো মুছে ইউনিক সংখ্যা তৈরি করার সংখ্যা গণনা


একটি সংখ্যা N ইনপুট হিসেবে দেওয়া আছে। N-এর ওপর দুটি অপারেশন করুন এবং প্রক্রিয়ায় জেনারেট হওয়া ইউনিক সংখ্যাগুলোর সংখ্যা বের করুন। ধাপগুলো:

  • সংখ্যাতে ১ যোগ করুন

  • জেনারেট হওয়া সংখ্যা থেকে ট্রেলিং জিরো মুছুন, যদি থাকে

যদি N = 8 হয়, তবে জেনারেট হওয়া সংখ্যাগুলো:

ধাপ ১: ৮ → ৯ →

ধাপ ২: ১ → (১০ থেকে ০ মুছে)

ধাপ ১: ২ → ৩ → ৪ → ৫ → ৬ → ৭ → ৮ (একই সিকোয়েন্স)

ইউনিক সংখ্যার কাউন্ট হবে ৯।

উদাহরণ ১

ইনপুট

N=21

আউটপুট

N থেকে ১ যোগ করে এবং ট্রেলিং জিরো মুছে ইউনিক সংখ্যা তৈরি করার সংখ্যা: 18

ব্যাখ্যা

সংখ্যাগুলো: ২১, ২২, ২৩, ২৪, ২৫, ২৬, ২৭, ২৮, ২৯, ৩, ৪, ৫, ৬, ৭, ৮, ৯, ১, ২, ৩ — এখন একই সিকোয়েন্স। ইউনিক সংখ্যা: ১৮

উদাহরণ ২

ইনপুট

N=38

আউটপুট

N থেকে ১ যোগ করে এবং ট্রেলিং জিরো মুছে ইউনিক সংখ্যা তৈরি করার সংখ্যা: 11

ব্যাখ্যা

সংখ্যাগুলো: ৩৮, ৩৯, ৪, ৫, ৬, ৭, ৮, ৯, ১, ২, ৩, ৪ — এখন একই সিকোয়েন্স। ইউনিক সংখ্যা: ১১

প্রয়োগ করা পদ্ধতি

এই পদ্ধতিতে একটি unordered_set U_S তৈরি করা হয় যেটি জেনারেট হওয়া সব ইউনিক সংখ্যা রাখবে। যদি সংখ্যাগুলো রিপিট হয়, তবে ইটেরেশন বন্ধ করা হয়। সেটের সাইজ আমাদের দেবে জেনারেট হওয়া ইউনিক সংখ্যাগুলোর কাউন্ট।

  • সংখ্যা N ইন্টিজার হিসেবে নিন।

  • জেনারেট হওয়া সংখ্যা ইনসার্ট করার জন্য unordered_set U_S নিন।

  • unique_N(unordered_set& U_S, int N) ফাংশনটি সেট এবং N নিয়ে সেটে সংখ্যা যোগ করে যতক্ষণ সব ইউনিক থাকে।

  • যদি U_S.count(N) ১ রিটার্ন করে, অর্থাৎ N ইতিমধ্যে সেটে আছে। তাই সংখ্যাগুলো রিপিট হবে, ফাংশন থেকে রিটার্ন করুন।

  • অন্যথায় N সেটে ইনসার্ট করুন এবং অপারেশন ১ লাগান (১ বাড়ান)।

  • চেক করুন N-এ ট্রেলিং জিরো আছে কিনা (১০-এর গুণফল কিনা)।

  • যদি N % 10 == 0 হয়, তবে ১০ দিয়ে ভাগ করে ট্রেলিং জিরো মুছুন।

  • আপডেট হওয়া N দিয়ে unique_N() কল করুন।

  • ফাংশন থেকে রিটার্ন করার পর কাউন্ট হিসেবে সেট U_S-এর সাইজ নিন।

  • ফলাফল হিসেবে কাউন্ট প্রিন্ট করুন।

উদাহরণ কোড

#include <bits/stdc++.h> 
using namespace std; 

void unique_N(unordered_set<int>& U_S, int N) {
    if (U_S.count(N)) {
        return; 
    } 
    
    U_S.insert(N); 
    N = N + 1; 
    
    while (N % 10 == 0) {
        N = N / 10; 
    } 
    
    unique_N(U_S, N); 
} 

int main() { 
    int N = 7; 
    unordered_set<int> U_S; 
    unique_N(U_S, N); 
    int count = U_S.size(); 
    cout << "N থেকে ১ যোগ করে এবং ট্রেলিং জিরো মুছে ইউনিক সংখ্যা তৈরি করার সংখ্যা: " << count; 
    return 0; 
}

আউটপুট

উপরোক্ত কোডটি রান করলে নিচের আউটপুটটি আসবে:

N থেকে ১ যোগ করে এবং ট্রেলিং জিরো মুছে ইউনিক সংখ্যা তৈরি করার সংখ্যা: 9

  1. C++ দিয়ে কমপক্ষে একটি নন-এম্পটি সাব-অ্যারের বিটওয়াইজ AND হবে এমন সংখ্যাগুলো বের করা

  2. রেঞ্জে সংখ্যা এবং তার q দিয়ে গুণফলের ডিজিট অসমান হলে সংখ্যা গণনা (C++)

  3. C++-এ একটি গেমে শূন্য বা ঋণাত্মক হতে পারা সংখ্যাগুলোর সংখ্যা গণনা

  4. C++-এ একটি বিশপ এক মুভে যেসব স্কয়ার ভিজিট করতে পারে সেটির সংখ্যা গণনা