C++ 中的映象反射


假設有一個特殊的正方形房間,四面牆壁都是鏡子。在除了西南角以外的每個角落都放置了一個接收器。這些接收器編號為 0、1 和 2。現在這個正方形房間的牆壁長度為 p,從西南角發出的雷射束第一次遇到東牆,與第 0 個接收器的距離為 q。我們需要找到雷射束第一次遇到的接收器的編號。

因此,如果 p = 2,q = 1,則情況如下:

因此,輸出將為 2,因為光線在第一次反射回左牆時遇到了接收器 2。

為了解決這個問題,我們將遵循以下步驟:

  • 當 p 和 q 均為偶數時,
    • p := p/2
    • q := q / 2
  • 如果 p 為偶數,則返回 2
  • 如果 q 為偶數,則返回 0
  • 返回 1。

讓我們看看以下實現,以更好地理解:

示例

 線上演示

#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;
   }
};
main(){
   Solution ob;
   cout << (ob.mirrorReflection(2, 1));
}

輸入

2
1

輸出

2

更新於: 2020年5月5日

660 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.