এখানে আমরা অ্যারে সংক্রান্ত একটি আকর্ষণীয় সমস্যা দেখব। n উপাদান বিশিষ্ট একটি অ্যারে দেওয়া আছে। আমাদের আরেকটি n আকারের অ্যারে তৈরি করতে হবে, যেখানে i-তম পজিশনে প্রথম অ্যারের সব উপাদানের যোগফল থাকবে i-তম উপাদান বাদ দিয়ে। একটি সীমাবদ্ধতা রয়েছে: বিয়োগ অপারেটর (subtraction operator) ব্যবহার করা যাবে না।
যদি বিয়োগ ব্যবহার করা যেত, তবে সহজে সমাধান করা যেত: সব উপাদানের যোগফল বের করে i-তম উপাদান বিয়োগ করে ফলাফল অ্যারেতে রাখলেই হত।
এখানে আমরা প্রতিবার উপাদানগুলো যোগ করব এবং i পজিশনের উপাদান বাদ দিব। i = 0 থেকে n-1 পর্যন্ত। অ্যালগরিদম দেখে বুঝতে পারব।
অ্যালগরিদম
sumArray(arr, n)
শুরু
res নামক n আকারের অ্যারে সংজ্ঞায়িত করুন
arr-এর সব উপাদান i এর জন্য, করুন
sum := 0
arr-এর সব উপাদান j এর জন্য, করুন
যদি i এবং j একই না হয়, তবে
sum := sum + arr[j]
শেষ যদি
শেষ করুন
res[i] = sum
শেষ করুন
res ফেরত দিন
শেষ
উদাহরণ কোড
#include <iostream>
using namespace std;
void printArray(int arr[], int n) {
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
}
void sumArray(int arr[], int resArr[], int n) {
for (int i = 0; i < n; i++) {
int sum = 0;
for (int j = 0; j < n; j++) {
if (i != j) {
sum += arr[j];
}
}
resArr[i] = sum;
}
}
int main() {
int myArr[7] = {5, 4, 7, 6, 9, 2, 3};
int resArr[7];
cout << "Initial Array: ";
printArray(myArr, 7);
sumArray(myArr, resArr, 7);
cout << "Final Array: ";
printArray(resArr, 7);
return 0;
}
আউটপুট
Initial Array: 5 4 7 6 9 2 3 Final Array: 31 32 29 30 27 34 33