আপনি স্ট্রিং একটি সংখ্যা দেওয়া হয়. এটিকে 3 দ্বারা বিভাজ্য করার জন্য আপনাকে কয়টি সংখ্যা অপসারণ করতে হবে তা খুঁজে বের করতে হবে।
আমরা সর্বাধিক 2 সংখ্যাগুলি সরিয়ে একটি সংখ্যাকে বিভাজ্য করি। সুতরাং, এটিকে 3 দ্বারা বিভাজ্য করার জন্য সর্বাধিক সংখ্যাটি বাদ দিতে হবে।
আসুন কিছু উদাহরণ দেখি।
ইনপুট
92
আউটপুট
1
3 দ্বারা বিভাজ্য করার জন্য আমরা 2কে সরিয়ে দিতে পারি।
ইনপুট
999
আউটপুট
0
প্রদত্ত সংখ্যাটি নিজেই 3 দ্বারা বিভাজ্য।
অ্যালগরিদম
-
স্ট্রিং-এ সংখ্যাটি শুরু করুন।
-
সংখ্যার যোগফল খুঁজুন।
-
যদি যোগফল 3 দ্বারা বিভাজ্য হয়, তাহলে 0। ফেরত দিন
-
যদি যোগফলটি 3 দ্বারা বিভাজ্য না হয় এবং সংখ্যাটির দৈর্ঘ্য 1 হয়, তবে আমরা এটিকে 3 দ্বারা বিভাজ্য করতে পারি না৷ -1 ফেরত দিন .
-
সংখ্যার উপর পুনরাবৃত্তি করুন।
-
সংখ্যা থেকে একটি সংখ্যা সরান এবং বিভাজ্যতা পরীক্ষা করুন।
-
যদি উপরের শর্তটি সন্তুষ্ট হয়, তাহলে 1. ফেরত দিন
-
-
সংখ্যাটির দৈর্ঘ্য আবার পরীক্ষা করুন। যদি দৈর্ঘ্য 2, হয় তারপর -1. ফিরুন
-
অন্যথায় 2. ফেরত দিন
বাস্তবায়ন
C++
-এ উপরের অ্যালগরিদমের বাস্তবায়ন নিচে দেওয়া হল#include <bits/stdc++.h>
using namespace std;
int getNumSum(string n) {
int len = n.length(), sum = 0;
for (int i = 0; i < len; i++) {
sum += (int)n[i];
}
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 currentDigit = num[i] - '0';
if (sum % 3 == currentDigit % 3) {
return 1;
}
}
if (n == 2) {
return -1;
}
return 2;
}
int main() {
string num = "7536836";
cout << getDigitsCount(num) << endl;
return 0;
} আউটপুট
আপনি যদি উপরের কোডটি চালান, তাহলে আপনি নিম্নলিখিত ফলাফল পাবেন।
1