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

Phản xạ gương trong phòng vuông C++ (Mirror Reflection)

Có một phòng vuông có gương 4 bức tường. Ở 3 góc (trừ góc tây nam) có 3 thụ thể (receptors) số 0, 1, 2. Tia laser từ góc tây nam chạm tường đông ở khoảng cách q từ thụ thể 0. Tìm thụ thể nào bị chạm đầu tiên. Tường có độ dài p.

Phân tích

Mô hình hóa bằng phản xạ: thay vì tia phản xạ, tưởng tượng phòng được lặp lại (như gương). Tia đi thẳng. Tìm lần đầu tiên tia chạm góc của phòng ảo.

Thuật toán

  • Rút gọn p, q: chia cả 2 cho 2 cho đến khi ít nhất một số lẻ
  • Nếu p chẵn → trả về 2
  • Nếu q chẵn → trả về 0
  • Ngược lại → trả về 1

Ví dụ

Input - p = 2, q = 1 Output - 2

Ví dụ code C++

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

class Solution {
public:
    int mirrorReflection(int p, int q) {
        while (p % 2 == 0 && q % 2 == 0) {
            p >>= 1;
            q >>= 1;
        }
        if (p % 2 == 0) return 2;
        if (q % 2 == 0) return 0;
        return 1;
    }
};

int main() {
    Solution ob;
    cout << ob.mirrorReflection(2, 1);
    return 0;
}

Kết quả

2