এখানে আমরা অ্যারে সম্পর্কিত একটি আকর্ষণীয় সমস্যা দেখতে পাব। n উপাদান সহ একটি অ্যারে আছে. আমাদের n উপাদানের আরেকটি অ্যারে তৈরি করতে হবে। কিন্তু দ্বিতীয় অ্যারের i-th অবস্থানটি i-th উপাদান ছাড়া প্রথম অ্যারের সমস্ত উপাদানের যোগফল ধরে রাখবে। এবং একটি সীমাবদ্ধতা হল আমরা এই সমস্যায় বিয়োগ অপারেটর ব্যবহার করতে পারি না।
আমরা যদি বিয়োগ, ক্রিয়াকলাপ ব্যবহার করতে পারি, তাহলে আমরা সহজেই এই সমস্যার সমাধান করতে পারি, সমস্ত উপাদানের যোগফল পেয়ে, তারপর প্রথম অ্যারের i-th উপাদান বিয়োগ করে দ্বিতীয় অ্যারের i-th স্থানে সংরক্ষণ করতে পারি।
এখানে আমরা প্রতিবার উপাদান যোগ করে এর সমাধান করছি, এবং i অবস্থানে থাকা উপাদানটিকে 0..n-1-এর জন্য উপেক্ষা করছি। আসুন বিন্দু পেতে অ্যালগরিদম দেখি।
অ্যালগরিদম
sumArray(arr, n)
begin define an array called res of size n for all elements i in arr, do sum := 0 for all elements j in arr, do if i and j are not same, then sum := sum + arr[j] end if done res[i] = sum done return res end
উদাহরণ
#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; } } 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); }
আউটপুট
Initial Array: 5 4 7 6 9 2 3 Final Array: 31 32 29 30 27 34 33