Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

การสะท้อนกระจก (Mirror Reflection) ใน C++

ห้องสี่เหลี่ยมจัตุรัสมีกระจก 4 ด้าน ที่มุม 3 มุม (ยกเว้นมุมตะวันตกเฉียงใต้) มีเซ็นเซอร์หมายเลข 0, 1, 2 เลเซอร์ออกจากมุมตะวันตกเฉียงใต้ ชนผนังตะวันออกที่ห่างจากเซ็นเซอร์ 0 ระยะ q ห้องกว้าง p หาว่าเลเซอร์จะชนเซ็นเซอร์ไหนก่อน

ตัวอย่าง

p = 2, q = 1 → Output: 2

การสะท้อนกระจก (Mirror Reflection) ใน C++

แนวทางแก้ปัญหา (คณิตศาสตร์)

  • ลด p และ q ด้วย 2 จนกว่าจะมีตัวใดตัวหนึ่งเป็นคี่
  • ถ้า p เป็นคู่ → เซ็นเซอร์ 2
  • ถ้า q เป็นคู่ → เซ็นเซอร์ 0
  • อื่นๆ → เซ็นเซอร์ 1

หลักการ: เหมือนกับการหาจุดที่เลเซอร์ชนมุมในกริดที่ขยายจากการสะท้อน

ตัวอย่างโค้ด 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); // Output: 2
    return 0;
}

ผลลัพธ์

2

บทความนี้แก้ปัญหา Mirror Reflection (LeetCode 858) โดยใช้คุณสมบัติของจำนวนคู่/คี่ หลังลดรูป p และ q ด้วย 2 จนกว่าจะมีตัวคี่ คำตอบขึ้นอยู่กับความคี่คู่ของ p และ q ที่เหลือ