Hành Trình Giải 1000 Bài Tập Kỹ Thuật Lập Trình – 1

Mình có nghe nói đến 1000 bài tập về kỹ thuật lập trình của thầy Nguyễn Tấn Trần Minh Khang, để ôn lại kiến thức cũ hằng ngày mình sẽ giải 5 câu. Dù biết đã có code sẵn trên mạng hết cả rồi nhưng mình vẫn thích tự giải lại để hiểu rõ hơn.

Đây là file PDF gồm 1000 bài tập mình tìm thấy trên trang thảo luận daynhauhoc.com.

Link PDF: https://drive.google.com/file/d/0BxMt6htzBQpIMHVVSDRrQ3BWRlE/view
I. Hành trình giải từ câu 1 đến câu 5.

Nhìn thì có vẻ hơi phức tạp nhưng thực chất thì những câu dạng này đều tuân theo một quy luật nhất định.

Câu 1: 

//Tính S(n)=1+2+3+...+n.
int S1(int n)
{
    int s=0;
    for (int i = 1; i <= n; i++)
    {
       s += i;
    }
    return s;
}

Câu 2:


//Tính S(n)=1^2+2^2+3^2+...+n^2.

int Power(int num,int k)

{

    int m = 1;

    for (int i = 1; i <= k; i++)

    {

       m *= num;

    }

    return m;

}

int S2(int n)

{

   int s = 0;

   for (int i = 1; i <= n; i++)

   {

      s += Power(i,2);

   }

   return s;

}

Câu 3:


//Tính S(n)=1+1/2+1/3+...+1/n.

float S3(int n)

{

   float s = 1;

   for (int i = 2; i <= n; i++)

   {

      s += (float)1/i;

   }

    return s;

}

Câu 4:


//Tính S(n)=1/2+1/4+...+1/2*n.

float S4(int n)

{

    float s = 0;

    for(int i=1;i<=n;i++)

    {

       s+=(float)1/(2*i);

    }

    return s;

}

Câu 5:    


//Tính 1+1/3+1/5+...+1/(2n+1).

float S5(int n)

{

    float s = 1;

    for (int i = 1;i <= n ; i++)

    {

       s += (float)1 / (2 * i + 1);

    }

    return s;

}

II. Hành trình giải từ câu 6 đến câu 10.

Câu 6:


//Tính 1/1*2 + 1/2*3 +...+1/n*(n+1).

float S6(int n)

{

    float s=0;

    for(int i=1; i<=n; i++)

    {

      s+=(float)1 / (i*(i+1));

    }

    return s;

}

Câu 7:


//Tính 1/2+2/3+3/4+...+n/(n+1).

float S7(int n)

{

     float s=0;

     for(int i=1; i<=n; i++)

     {

       s+=(float)i/(i+1);

     }

     return s;

}

Câu 8:


//Tính 1/2+3/4+5/6+...+(2n+1)/(2n+2).

float S8(int n)

{

     float s=0;

     for(int i=0; i<=n; i++)

     {

       s+=(float)(2*i+1)/(2*i+2);

     }

     return s;

}

Câu 9:


//Tính 1*2*3*...*n.

int S9(int n)

{

     int m=1;

     for(int i=2; i<=n; i++)

     {

       m*=i;
 
     }

     return m;

}

Câu 10:


//Tính T(x,n)=x^n.

//Giống hàm Power.

int Power(int num,int k)

{

     int m = 1;

     for (int i = 1; i <= k; i++)

     {

        m *= num;

     }

     return m;

}

Lưu ý: Ở những phép toán chia ví dụ 1 / 2 = 0,5 là số nguyên chia cho số nguyên kết quả phải ra số nguyên mà nếu kết quả là số nguyên thì chỉ lấy phần nguyên ở kết quả, 0,5 chỉ lấy phần nguyên thôi thì sẽ là 0, chính vì vậy có thể dẫn đến sai số nghiêm trọng trong quá trình tính toán.

Để khắc phục điều đó ta phải ép kiểu tử số hoặc mẫu số về dạng kiểu số thực float hay double để kết quả của phép chia là kiểu số thực. Ví dụ như (float)1/2 = 0,5 ở đây ta ép kiểu tử số viết rõ ràng hơn ((float)1)/2 = 0,5 như vậy kết quả cuối cùng sẽ không bị sai số.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s