Loading Now

Count Max Line

Luyện tập Code

Trong mặt phẳng, cho n đường thẳng, các đưởng thẳng này có thể cắt nhau tại các giao điểm. 

Như chúng ta đã biết, cứ qua 2 điểm ta lại xác được 1 đường thẳng. Hai đường thẳng được gọi là trùng nhau nếu giữa chúng có ít nhất 2 điểm chung.
Nhiệm vụ của bạn là xác định xem với n đường thẳng cắt nhau trên mặt phẳng (các đường thẳng có thể được vẽ tùy ý) thì qua các giao điểm của chúng, ta xác định được tối đa bao nhiêu đường thẳng phân biệt (không trùng nhau), bao gồm cả các đường thẳng ban đầu.

Ví dụ: 

  • Với n = 4, thì kết quả sẽ là numberOfLine(4) = 7
    Với hình bên dưới ta có thể thấy rằng các giao điểm của 4 đường thẳng (màu xanh, đỏ, vàng đen) là A, B, C, D, E, F.
    Qua tất cả các giao điểm ta lại xác định được rằng có 7 đường thẳng đi qua các giao điểm đó. Bao gồm: AE, AC, EB, FC, FB, EC, AD
    Lưu ý: đường thẳng đi qua A, E và đường thẳng đi qua A, F trùng nhau nên ta chỉ tính một lần, các trường hợp tương tự cũng chỉ tính một lần.

Đầu vào/Đầu ra:

  • [Thời gian] 0.5s với C++, 3s với Java và C#, 4s với Python, Go và JavaScript.
  • [Đầu vào] integer n
    0 < n <= 10000.
  • [Đầu ra] long
    Số đường thẳng phân biệt lớn nhất được xác định bởi các giao điểm của n đường thẳng thên mặt phẳng.

Post Comment

Contact