https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=1048
সহজ একটা প্রোবলেম , ছোটবেলায় আমরা মধ্যক বের করতাম , মনে আছে কি ??? হুম, এখানেও
প্রায়ই , একই কাজ করতে হবে - ধরো যদি দেয়া আছে ,
১ , ৫ , ৩ , ৪ , ৭ ।। তাহলে , প্রথমে আমরা ছোট থেকে বড় আকারে সাজিয়ে নেই ।।
তাহলে , সাজিয়ে পাবো -- ১ , ৩ , ৪ , ৫ , ৭ । এখন যেহেতু , এখানে - বিজোড় সংখ্যক সংখ্যা আছে ,তাহলে একদম মাঝের ৪ ই হবে , মধ্যক । কিন্তু , যদি - থাকতো ১ , ৩ , ৪ , ৫ , ৭ , ৯ তাহলে ????
এখানে তো - মাঝে বলতে কিছু নেই । । সেইজন্যই , মাঝের দুইটা সংখ্যা ৪ ও ৫ নিয়ে এদের এভারেজ করলে , উত্তর পেয়ে যাবো । চলো , কোড দেখে নেই এবং বিশ্লেষণ বোঝার ট্রাই করি ।
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
long long ar[100000],n,i=0,l;
while(cin>>n)
{
ar[i]=n;
sort(ar,ar+i+1);
if(i%2==0)
cout<<ar[i/2]<<endl;
else
{
l=ar[i/2]+ar[i/2+1];
cout<<l/2<<endl;
}
i++;
}
return 0;
}
প্রথমে , i=0 ।। তাহলে , ইনপুটে যদি দেই - 1 , তাহলে ar[0]= 1 ।
sort(ar,ar+i+1) = sort(ar,ar+0+1) = sort (ar,ar+1) ,অ্যারের প্রথম ১ টা মান সর্ট করবে , অ্যারে যা ছিলো তাই আছে ar[0]= 1।
if(i%2==0) এই শর্ত পূরণ করে , প্রিন্ট করবে ar[i/2] = ar[0/2] = ar[0] = 1 && i=0 বেড়ে i=1 হয়ে গেলো |
আবার ইনপুট দিলাম , ar[1] = 3 | | সুতরাং , অ্যারে'টি দাড়ালো ar[0]= 1,ar[1] = 3 ।।
sort(ar,ar+i+1) = sort(ar,ar+1+1) = sort (ar,ar+2) , অ্যারের প্রথম ২ টা মান সর্ট করবে , যা ছিলো - তাই থাকবে , কারণ সর্ট অবস্থায়ই আছে , অ্যারে ।
if(i%2==0) এই শর্ত পূরণ হয় নি , কারণ i=1| সুতরাং , ar[i/2]+ar[i/2+1] = ar[0.5] + ar [1.5]= ar[0] +ar[1] = 1+3 = 4 , সুতরাং প্রিন্ট করবে --- 4/2 = 2 | | [ বিঃদ্রঃ - (i/2) = 0.5 হলেও i কে int হিসেবে ডিক্লেয়ার করা হয়েছে , এছাড়াও index কখনো fraction হতে পারে না , বিধায় 0.5 & 1.5 কে ধরে নেওয়া হয় 0 ]
আশা করি , বাকি টুকু একটু কষ্ট করলেই খুব সহজেই বুঝা যাবে ...
many many thanks for describe the problem.
ReplyDeleteThis comment has been removed by the author.
ReplyDelete