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

সি++-এ দিয়ে সংখ্যা কমিয়ে ০-এর নিচে আনতে প্রয়োজনীয় অপারেশন গণনা

একটি ধনাত্মক ইন্টিজার K এবং একটি অ্যারে Ops[] দেওয়া আছে যাতে ইন্টিজার থাকে। লক্ষ্য হল K কত অপারেশন দিয়ে ০-এর নিচে আনা যায় তা বের করা। অপারেশনগুলো:

  • প্রথম অপারেশন: K + Ops[0] (প্রথম উপাদান K-এ যোগ)।
  • পরে Ops[i] যোগ করতে থাকবে K-এ যতক্ষণ K<0। ইনডেক্স i বৃত্তাকারভাবে (circular) बदলে: 0<=i

নোট: K<0 না হওয়া পর্যন্ত Ops[i] যোগ করতে থাকবে। i শেষ উপাদান Ops[N-1]-এ পৌঁছালে আবার i=0 থেকে শুরু হবে। বৃত্তাকারভাবে।

প্রথমে চেক করা হয় Ops[]-এর সব উপাদানের যোগফল >0 কিনা। হলে K কখনো কমাবে না। -1 রিটার্ন। অন্যথায় Ops[i] যোগ করে K<0 কিনা চেক করে count বাড়ানো হয়।

উদাহরণ

ইনপুট: ops[] = { -4,2,-3,0,2 }, K=5

আউটপুট: সংখ্যা কমাতে প্রয়োজনীয় অপারেশন: ৩

ব্যাখ্যা: K=5। অপারেশন: ১) 5+(-4)=1, ২) 1+2=3, ৩) 3+(-3)=0

ইনপুট: ops[] = { 5,5,3,-2 }, K=10

আউটপুট: K কমানো সম্ভব নয়!!

ব্যাখ্যা: ops[]-এর যোগফল ১১। ১১+১০ সবসময় ধনাত্মক থাকবে। K ০-এর নিচে যাবে না।

অ্যাপ্রোচ

  • ইন্টিজার অ্যারে ops[] নেওয়া হয়।
  • K ধনাত্মক মান দিয়ে দেওয়া হয়।
  • countOperations(int op[], int n, int k) ফাংশন K, Ops[] এবং দৈর্ঘ্য গ্রহণ করে K ০-এর নিচে আনতে প্রয়োজনীয় অপারেশন রিটার্ন করে।
  • প্রাথমিক অপারেশন সংখ্যা count=0।
  • ops[]-এর যোগফল sum-এ। sum>=0 হলে -1 রিটার্ন।
  • while(k>0) লুপে ops[i] যোগ করে count বাড়ানো হয়। k<0 হলে ব্রেক।

উদাহরণ কোড

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

long countOperations(int op[], int n, int k) {
    long count = 0;
    int sum = 0;
    for (int i = 0; i < n; i++) {
        sum += op[i];
    }
    if (sum >= 0) {
        return -1;
    }
    while (k > 0) {
        for (int i = 0; i < n; i++) {
            if (k > 0) {
                count++;
                k += op[i];
            } else {
                break;
            }
        }
    }
    return count;
}

int main() {
    int Ops[] = { 1, -1, 5, -11 };
    int len = sizeof(Ops) / sizeof(Ops[0]);
    int K = 10;
    long ans = countOperations(Ops, len, K);
    if (ans == -1) {
        cout << "K cannot be reduced!!";
    } else {
        cout << "Number of operations : " << ans;
    }
    return 0;
}

আউটপুট

Number of operations : 8
  1. C++-এ দिये गये আয়তের ভেতরে সম্ভাব্য রম্বসের সংখ্যা গণনা

  2. C++-এ সংখ্যা N-কে ভাগ করে দিতে পারা ডিজিট গণনা

  3. C++-এ সংখ্যা m কে n-এ রূপান্তর করতে ন্যূনতম অপারেশন

  4. C++-এ দেওয়া সংখ্যার ডিজিটগুলোর যোগফল বের করা