Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Đếm số góc tù trong đường tròn với k điểm cách đều giữa 2 điểm cho trước C++

Cho một đường tròn với K điểm cách đều trên đường tròn. Cũng cho hai điểm A và B. Mục tiêu là đếm số tam giác có thể tạo bằng các điểm này sao cho chúng có góc tù ACB (góc lớn hơn 90°) bên trong. Các điểm A và B thỏa mãn A < B.

Đếm số góc tù trong đường tròn với k điểm cách đều giữa 2 điểm cho trước C++

Ở đây K=8, A=2, B=5, số điểm = 2 (C, C') sao cho góc ACB, AC'B là góc tù.

Ví dụ

Đầu vào - k=10, A=2, B=4

Đầu ra - Số góc tù trong đường tròn với k điểm cách đều giữa 2 điểm là 1

Giải thích - Điểm sẽ là C=3

Đầu vào - k=12, A=2, B=10

Đầu ra - Số góc tù trong đường tròn với k điểm cách đều giữa 2 điểm là 3

Phương pháp sử dụng

Có thể thấy nếu cung nhỏ hơn giữa A và B thì các điểm sẽ nằm trên cung đó.

Tính cả hai cung và nếu chúng bằng nhau thì không có tam giác nào, trả về 0. Ngược lại gán count = cung nhỏ hơn (khoảng cách tính bằng số điểm).

  • Nhập k, point_a, point_b nguyên
  • Hàm Obtuse_angle_circle(int point_a, int point_b, int k) trả về số góc tù
  • Khởi tạo count = 0
  • Tính cung thứ nhất: arc_1 = (point_b - point_a) - 1 (b > a)
  • Tính cung thứ hai: arc_2 = (k - point_b) + (point_a - 1)
  • Nếu hai cung bằng nhau trả về 0
  • Nếu không bằng nhau: count = min(arc_1, arc_2)
  • Trả về count

Chương trình minh họa

#include <bits/stdc++.h>
using namespace std;

int Obtuse_angle_circle(int point_a, int point_b, int k) {
    int count = 0;
    int arc_1 = (point_b - point_a) - 1;
    int arc_2 = (k - point_b) + (point_a - 1);
    if (arc_1 == arc_2)
        return 0;
    count = min(arc_1, arc_2);
    return count;
}

int main() {
    int k = 10;
    int point_a = 1;
    int point_b = 4;
    cout << "Số góc tù trong đường tròn với k điểm cách đều giữa 2 điểm là: "
         << Obtuse_angle_circle(point_a, point_b, k);
    return 0;
}

Đầu ra

Số góc tù trong đường tròn với k điểm cách đều giữa 2 điểm là: 2