বৃহস্পতিবার, ১১ আগস্ট, ২০১৬

UVA 10013 - Super long sums

#include<bits/stdc++.h>
using namespace std;
#include<string.h>
#define mx 1000009
long long s1[mx],s2[mx];
long long s3[mx];
int main()
{
    long long i,j,k,n,m,l1,l2,a,b,s,carry,c,ll1,ll2;
   
    cin>>n;
    for(i=1; i<=n; i++)
    {

        cin>>m;
        for(j=0; j<m; j++)
            cin>>s1[j]>>s2[j];
        carry=0;
        c=0;
        for(j=m-1; j>=0; j--)
        {
            a=s1[j];
            b=s2[j];
           
            s=a+b+carry;
            if(s>9)
            {

                s3[c]=s%10;
                carry=1;
             
                c++;
            }
            else
            {
                s3[c]=s;
                carry=0;
             
                c++;
            }
        }
        if(carry==1)
            s3[c++]=carry;
            if(i!=1)
              cout<<endl;
        for(k=c-1; k>=0; k--)
            cout<<s3[k];
        cout<<endl;
    }
    return 0;
}

শুক্রবার, ২৪ জুন, ২০১৬

Recursive Functions বাংলায় শিখুন ২

এখানে আমি আর ভাল ভাবে বুঝানোর চেষ্টা করব কি ভাবে recursion কাজ করে_

পূর্বে আমরা recursive function সম্পর্কে দেখেছি। আরও ভালো ভাবে বুঝার জন্য নিচের post টা দেকতে পারেন_

recursive function টা অনেকটা একসঙ্গে  অনেকগুলো plate রাখার মতো  কাজ করে ।যেটা আগে রাখা হয়  সেটা সবার পরে বের করতে হয়।


এবার code টা দেখা যাক-

#include<stdio.h>
#include<stdio.h>
#include<bits/stdc++.h>
using namespace std;
int a=1;
int b=10;
int c=20;
int f(int a)
{
    if(a>5)
        return 0;
    else
    {
        return a+f(a+1);
    }
}
int main()
{
    int s;
    s=f(1);
    printf("%d",s);
}

Output: 15

এখন প্রশ্ন হল কিভাবে code টা কাজ করছে তাই না ?

  1. main function এ গিয়া f(1) function টাকে call করবে। সুতরাং a=1 প্রথম অবস্থায়
  2. f(int a) function এ গিয়ে condition check করবে। condition মিথ্যা তাই সে return a+f(a+1); এ f(a+1) দ্বারা পুনরায় call করবে।
  3.  প্রতি call এ  যদি a এর মান  5 এর চে কম হয় তবে প্রতিবার a+f(a+1) return করবে।
  4. আবার condition check করবে। condition মিথ্যা ববে a+f(a+1) return করবে।
  5. এভাবে যখন না condition সত্য হয় ততোক্ষণ return  করবে।
  6. প্রতিবার এ f(a+1) function টা a এর মান ১ বৃদ্ধি করে দিচ্ছে এবং সেই মান দিয়েই call করছে। বেপারটা এরকম।
 1+f(a+1)        a=1;
2+f(a+1)         a=2
3+f(a+1)         a=3
4+f(a+1)         a=4
5+f(a+1)         a=5
a এর মান যখন 6 তখন return 0 করবে। ভাল ভাবে বঝার জন্য f(a+1) এর মান ans ধরে নেই , তাহলে বেপারটাএমন হয় 
 1+ans       a=1;
2+ans         a=2
3+ans        a=3
4+ans         a=4
5+ans         a=5
যেহেতু সবার শেষে 0 return করছে সেহেতু ans=0.

আমি আগেই বলেছি যে recursive function টা অনেকটা একসঙ্গে  অনেকগুলো plate রাখার মতো  কাজ করে ।যেটা আগে রাখা হয়  সেটা সবার পরে বের করতে হয়। 

 কাজ সম্পাদন করার সময় অনুযায়ী উপর থেকে নিচে  সাজালে আমরা পাই
ans=0;
5+ans         a=5
4+ans         a=4
3+ans        a=3
2+ans         a=2
1+ans          a=1;
তাহলে কাজ টা এমন হবে-
ans=5+0     [ যেহেতু ans=0 ছিল]
ans=4+5    [ যেহেতু ans=5=5+0 ছিল]
ans=3+9    [ যেহেতু ans=9=4+5 ছিল]
ans=2+12    [ যেহেতু ans=12=3+9 ছিল]
ans=1+14    [ যেহেতু ans=14=2+12ছিল]
ans=15    [ যেহেতু ans=15=1+14 ছিল]




Recursive Functions বাংলায় শিখুন ১

আমার এই ব্লগ লিখার উদ্দেশ্য হচ্ছে Recursive Functions সম্পরকে ভাল ভাবে জানা।আমি Recursive Functions সম্পরকে নিয়মিত লিখব এই ব্লগ এ ।

সবার আগে Recursive Functions তা কি তা জেনে নেই।
                                                       
                                                     Recursive Functions
Recursive Functionsঃ Recursive Functions এমন একটি Functions যা নিজেকে call করে।

যেমনঃ
#include<bits/stdc++.h>
using namespace std;
int a=1;
int main(){

    printf("%d ",a++);
      if(a>5)
        return 0;
     main();

}
Output:

এখানে main function বার বার main function কে call করছে।
এখন কথা হল কিভাবে program টা কাজ করছে তাই না ?

  1. আমরা জানি যে কোন program compile হয়ার সময় সবার আগে main function কে খুজে।
  2. main function কে পাওয়ার পর printf() function কে পেল ।
  3. printf()  এ গিয়ে দেখল যে a এর মান প্রিন্ট করতে নির্দেশ দেয়া হয়েছে।
  4. কিন্তু এর মান পূর্বেই globally declare করা হএছে ,যার মান ছিল 1.
  5. 1 print করার পর তা increase হয়েছে।
  6. তার পর if condition check করা হয়েছে।
  7. condition মিথ্যা বলে main() function এর মাধ্যমে পুনরায় main() কে call করছে ।
  8. এভাবে যতক্ষণ না a এর মান 5 এর বেশি না হএ ততক্ষণ চলতে থাকবে ।
  9. বেশি হলে return করবে ।


এখন আমরা দেকব কি ভাবে n তম পর্যন্ত print করা যায় ঃ

n তম পর্যন্ত print করা 

আগে উদারহন টা দেখে নেই
#include<bits/stdc++.h>
using namespace std;
int n=10;
int i=1;
int main()
{
    printf("%d\n",i++);
    if(i>n)
        return 0;
    main();

}

Output:


উদারহনে n এর মান 10 নেয়া হয়েছে।এবং output এ 1 থেকে 10 পর্যন্ত মান দেখান হয়েছে।
এর পরের post এ আমরা আর ভাল ভাবে দেকব কি ভাবে recursion কাজ করে।

আরও ভালো ভাবে বুঝার জন্য পরবর্তী post দেখতে পারেন