ধরুন আমরা একটি লাইব্রেরি সিস্টেম তৈরির দায়িত্বে আছি যা লাইব্রেরিতে বিভিন্ন ক্রিয়াকলাপ নিরীক্ষণ করে এবং জিজ্ঞাসা করে। আমাদের এখন তিনটি ভিন্ন কমান্ড প্রয়োগ করতে বলা হয়েছে যা নিম্নলিখিত −
সম্পাদন করে-
কমান্ড 1 ব্যবহার করে, আমরা শেলফ x এ y পৃষ্ঠা সহ একটি বইয়ের সন্নিবেশ রেকর্ড করতে পারি।
-
কমান্ড 2 ব্যবহার করে, আমরা শেলফ x এ y-ম বইয়ের পৃষ্ঠা নম্বর প্রিন্ট করতে পারি।
-
কমান্ড 3 ব্যবহার করে, আমরা শেলফ x এ বইয়ের সংখ্যা প্রিন্ট করতে পারি।
এই ফরম্যাটে {কমান্ড টাইপ, x, y} কমান্ডগুলি আমাদেরকে 2D অ্যারে হিসাবে দেওয়া হয়েছে। যদি কোন y মান না থাকে, মানটি ডিফল্ট 0 এ থাকবে। আমরা প্রদত্ত কমান্ডের ফলাফল প্রিন্ট করি।
সুতরাং, যদি ইনপুটটি হয় তাক সংখ্যা =4, প্রশ্ন =4, input_arr ={{1, 3, 23}, {1, 4, 128}, {2, 3, 0}, {3, 4, 0 }}; তাহলে আউটপুট হবে
23 1
Command 1 inserts a book with 23 pages on shelf 3. Command 2 inserts a book with 128 pages on shelf 4. Command 3 prints the page number of book 0 on shelf 3. Command 4 prints the number of books on shelf 3.
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- b :=s আকারের একটি নতুন অ্যারে
- p :=s আকারের একটি নতুন অ্যারে
- আরম্ভ করার জন্য i :=0, যখন i
- b[i] :=0
- p[i] :=একটি নতুন অ্যারে
qtype :=q_array[loopCount, 0] যদি qtype 1 এর মত হয়, তাহলে −
- x :=q_array[loopCount, 1]
- y :=q_array[loopCount, 2]
- b[x] :=b[x] + 1
- p[x] :=p[x] দ্বারা নির্দেশিত বস্তুকে ডিলোকেট করুন এবং সাইজের একটি পয়েন্টার ফেরত দিন
- b[x]
- p[x, b[x] - 1] =y
অন্যথায় যখন qtype 2 এর মত হয়, তখন −
- x :=q_array[loopCount, 1]
- y :=q_array[loopCount, 2]
- প্রিন্ট(p[x, y])
অন্যথায়
- x :=q_array[loopCount, 1]
- মুদ্রণ(b[x])
- b দ্বারা অর্জিত মেমরি নিষ্কাশন করুন
- p[i] দ্বারা অর্জিত মেমরি নিষ্কাশন করুন
- p দ্বারা অর্জিত মেমরি ডিলোকেট করুন
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
#include <stdio.h> #include <stdlib.h> void solve(int s, int q, int q_array[][3]) { int* b; int** p; b = (int*)malloc(sizeof(int)*s); p = (int**)malloc(sizeof(int*)*s); for(int i = 0; i < s; i++) { b[i] = 0; p[i] = (int*)malloc(sizeof(int)); } int loopCount; for(loopCount = 0; loopCount < q; loopCount++) { int qtype; qtype = q_array[loopCount][0]; if (qtype == 1) { int x, y; x = q_array[loopCount][1]; y = q_array[loopCount][2]; b[x] += 1; p[x] = realloc(p[x], b[x]*sizeof(int)); p[x][b[x] - 1] = y; } else if (qtype == 2) { int x, y; x = q_array[loopCount][1]; y = q_array[loopCount][2]; printf("%d\n", p[x][y]); } else { int x; x = q_array[loopCount][1]; printf("%d\n", b[x]); } } if (b) free(b); for (int i = 0; i < s; i++) if (p[i]) free(p[i]); if (p) free(p); } int main() { int input_arr[][3] = {{1, 3, 23}, {1, 4, 128}, {2, 3, 0}, {3, 4, 0}}; solve(4, 4, input_arr); }
ইনপুট
int input_arr[][3] = {{1, 3, 23}, {1, 4, 128}, {2, 3, 0}, {3, 4, 0}}; solve(4, 4, input_arr);
আউটপুট
23 1