[Lập trình C] Bài toán lật sách

Saturday, May 09, 2020
Edit this post


Đây là một bài kỹ thuật lập trình khá thú vị mà tôi vừa thấy trên HackerRank. Bài toán được xếp ở mức Easy, nhưng thú thật là ban đầu tôi có hơi lúng túng khi đọc mô tả của đề bài vì nó cố tình được viết để khiến chúng ta phải rối trí và suy nghĩ theo định hướng của đề.

Trước khi đi vào phân tích bằng tiếng Việt, hãy cùng đọc qua đề gốc cùng các test case ví dụ.





Bạn đọc xong rồi chứ? Đề bài mới đọc qua thì cảm giác khá phức tạp, nhưng chỉ cần một chút suy nghĩ, bạn sẽ thấy vấn đề thực ra đơn giản hơn rất nhiều, chỉ là do cái đề bài mô tả quá vòng vo mà thôi. Những điểm cần lưu ý:

- Brie chỉ có thể bắt đầu lật từ đầu hoặc cuối cuốn sách.
- Mỗi lần lật, bất kể từ đầu hay cuối, chúng ta đều đi qua 2 trang sách.
- Số lần lật tối đa để đi hết quyển sách (từ đầu hoặc cuối) sẽ là n/2, với n là tổng số trang sách.
- Tương tự, số lần lật tối đa để đi từ đầu tới trang p sẽ là p/2, tạm gọi là left.
- Vậy, số lần lật tối đa để đi từ cuối tới trang p sẽ là (n - p)/2 = n/2 - p/2, tạm gọi là right.
- Giữa left và right, số nào nhỏ hơn thì sẽ trả về số đó.

OK, tới đây là xong, hãy bắt đầu viết code thôi:


#include <stdio.h>

int pageCount(int n, int p) {
    int total = n/2;
    int left = p/2;
    int right = n/2 - p/2;
    return left < right ? left : right;
}

int main()
{
    int n, p;
    scanf("%d %d", &n, &p);
    printf("%d", pageCount(n, p));

    return 0;
}

.
Xin vui lòng chờ đợi
Dữ liệu bài viết đang được tải về

© Copyright by CUỘC SỐNG TỐI GIẢN
Loading...