Skip to main content

অনলাইন জাজে প্রোগ্রামিং প্রবলেম সল্ভিং টেকনিক

যারা প্রোগ্রামিং প্রবলেম সল্ভিং শুরু করতে চায় তাদের অনেককেই একদম শুরুতে একটা সমস্যায় পড়তে হয় অনেকগুলো টেস্টকেসের জন্য কীভাবে কোড লিখবে তা নিয়ে। এরকম কয়েকটি ক্ষেত্র নিয়ে লিখছিঃ
১) টেস্ট কেসের সংখ্যা বলে দিবে।
ক) প্রথম লাইনে টেস্টকেসের সংখ্যা বলে দেওয়া হবে, তারপর থাকবে ঐ টেস্টকেসের বিভিন্ন সংখ্যা (ইনপুট)
যেমনঃ প্রথম লাইনে টেস্টকেস নির্দেশক একটি পূর্ণসংখ্যা দেওয়া হবে তারপর ততটি লাইনে ২ টি স্পেস দ্বারা পৃথক সংখ্যা দেওয়া হবে। তাদের যোগফল দেখাতে হবে। এটা এভাবে করা যায়ঃ
int a, b, i=1, t;
scanf("%d", &t);
while(t--) {
scanf("%d%d", &a, &b);
printf("Case %d: %d\n", i++, a+b);
}
return 0;
for লুপ ব্যবহার করতে চাইলেঃ
int a, b, t, i;
scanf("%d", &t);
for(i=1; i<=t; i++) {
scanf("%d%d", &a, &b);
printf("Case %d: %d\n", i, a+b);
}
return 0;
খ) প্রথম লাইনে টেস্টকেসের সংখ্যা বলে দেওয়া হবে, তারপর ঐ টেস্টকেসের ইনপুট হিসেবে স্ট্রিং বা ক্যরেকটার দেওয়া থাকবে।
যেমনঃ
int t;
char s[10];
scanf("%d", &t);
getchar();
while(t--) {
gets(s);
... ... //do whatever you need to do
}
getchar() কেন ব্যবহার করা হল? এখানে প্রথমবার যখন টেস্ট কেইস নাম্বার দিয়ে এন্টার চাপা হয় তখন একটা খালি স্ট্রিং ইনপুট নেওয়া হয়ে যায় বলে কাঙ্ক্ষিত ইনপুট নিতে সমস্যা হবে। scanf("%d", &t) -র পর একটি getchar() দিয়ে
ঐ এন্টারের খালি লাইনটি নিয়ে নিলে এই সমস্যা থাকে না। অথবা getchar() না লিখে scanf("%d\n", &t); -এভাবে লিখলেও কাজ হবে। অন্যভাবেও করা যাতে পারে। ক্যারেকটারের ক্ষেত্রেও একই বিষয়।
                                      ***                             ***                          ***
২) টেস্টকেসের সংখ্যা বলে দিবে না, কিন্তু ঠিকই ইনপুট ফাইলের শেষ পর্যন্ত ইনপুট নিতে হবে। এক্ষেত্রে বলে দিতে পারে যে - input is teminated by end of file, কিন্তু কিছু না বললেও এভাবে করতে হবে।
ক) ১ টা সংখ্যা দেওয়া হবে তার বর্গমূল দেখাতে হবেঃ
double x;
while(scanf("%lf", &x) != EOF) {
printf("%lf\n", sqrt(x));
}
scanf("%lf", &x) != EOF -এর অর্থ হল যতক্ষণ পর্যন্ত ইনপুট ফাইলের শেষ না হচ্ছে ততক্ষণ পর্যন্ত ইনপুট নেওয়া হবে।
খ) একই কাজ স্ট্রিং -এর বেলায় করতে গেলে করতে হবে এভাবেঃ
char s[10];
while(gets(s) != NULL) {
... ...
}
** প্রশ্ন হতে পারে আমি ইচ্ছামত ইনপুট দেওয়ার পর কী EOF বা NULL -এর ব্যাপারটি কম্পিউটারকে বোঝাতে বা নির্দেশ দিতে পারি? উত্তর - হ্যাঁ। আগে ctrl + z চেপে Enter চাপলে প্রোগ্রামটি টারমিনেটেড হবে।
                                       ***                             ***                          ***
সাধারণত এসব উপায়েই ইনপুট নিয়ে আউটপুট জেনারেট করতে হয়। আসলে এগুলো ভিন্ন কোনো নিয়ম না, প্রথমদিকে আমরা প্রবলেম স্টেটমেন্ট থেকে অনেকেই বুঝতে পারিনা এই আরকি। আর অন্য কোনোভাবে ইনপুট নিতে হলে আশা করি প্রবলেমের বর্ণনা পড়ে পারা যাবে।

Comments

Popular posts from this blog