আপনাকে একটি স্ট্রিং আকারে সংখ্যা দেওয়া হয়েছে। বের করতে হবে সর্বোচ্চ কতগুলো অঙ্ক মুছে দিলে সেটি ৩ দ্বারা বিভাজ্য হবে। সর্বোচ্চ ২টি অঙ্ক মুছে দেওয়া যেতে পারে।
উদাহরণ
ইনপুট: 92 → আউটপুট: 1 (২ মুছে দিলে ৯ হয়, যা ৩ দ্বারা বিভাজ্য)
ইনপুট: 999 → আউটপুট: 0 (ইতিমধ্যেই ৩ দ্বারা বিভাজ্য)
অ্যালগরিদম
- সংখ্যাটি স্ট্রিং হিসেবে নিন।
- সর্বোচ্চ অঙ্কের যোগফল বের করুন।
- যদি যোগফল ৩ দ্বারা বিভাজ্য হয়, ফেরত দিন ০।
- যদি না হয় এবং দৈর্ঘ্য ১ হয়, ফেরত দিন -১ (সম্ভব নয়)।
- প্রতিটি অঙ্ক দিয়ে দেখুন: সেটি মুছে দিলে যোগফল ৩ দ্বারা বিভাজ্য হয় কিনা। হলে ফেরত দিন ১।
- দৈর্ঘ্য ২ হলে ফেরত দিন -১।
- অন্যথায় ফেরত দিন ২।
সি++ ইমপ্লিমেন্টেশন
#include <bits/stdc++.h>
using namespace std;
int getNumSum(string n) {
int sum = 0;
for (char c : n) sum += (c - '0');
return sum;
}
int getDigitsCount(string num) {
int n = num.length();
int sum = getNumSum(num);
if (sum % 3 == 0) return 0;
if (n == 1) return -1;
for (int i = 0; i < n; i++) {
int digit = num[i] - '0';
if (sum % 3 == digit % 3) return 1;
}
if (n == 2) return -1;
return 2;
}
int main() {
string num = "7536836";
cout << getDigitsCount(num) << endl;
return 0;
}
আউটপুট
1