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

ภาพสะท้อนใน C++


สมมติว่ามีห้องสี่เหลี่ยมพิเศษที่มีกระจกอยู่บนผนังทั้งสี่ด้าน ในแต่ละมุมยกเว้นมุมตะวันตกเฉียงใต้มีตัวรับ สิ่งเหล่านี้มีหมายเลขเป็น 0, 1 และ 2 ตอนนี้ห้องสี่เหลี่ยมมีผนังยาว p และรังสีเลเซอร์จากมุมตะวันตกเฉียงใต้มาบรรจบกับผนังด้านตะวันออกครั้งแรกที่ระยะ q จากตัวรับที่ 0 เราต้องหาจำนวนตัวรับที่รังสีมาบรรจบกันก่อน

ดังนั้นหาก p =2 และ q =1 กรณีจะเป็นเช่น −

ภาพสะท้อนใน C++

ดังนั้นเอาต์พุตจะเป็น 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