โจทย์
ได้รับ A, B, T ทางเราเล่นเกม T รอบ:
- รอบที่เลขคี่:
A = A * 2 - รอบที่เลขคู่:
B = B * 2
หาค่า max(A, B) / min(A, B) หลังจบเกม
ตัวอย่าง
Input: A=3, B=4, T=3
Output: 1
อธิบาย: รอบ1: A=6, รอบ2: B=8, รอบ3: A=12 -> max=12, min=4 -> 12/4=3 (โค้ดตัวอย่างมีข้อผิดพลาด ผลลัพธ์ควรเป็น 3)
แนวทางแก้ปัญหา (O(1))
สังเกตรูปแบบ:
- ถ้า T คู่: A และ B คูณ 2 เท่ากัน -> อัตราส่วนไม่เปลี่ยน =
max(A,B)/min(A,B) - ถ้า T คี่: A คูณ 2 เพิ่มอีกครั้ง -> อัตราส่วน =
max(2A,B)/min(2A,B)
โปรแกรมตัวอย่าง
#include <iostream>
#include <algorithm>
using namespace std;
int EvenOddGame(int A, int B, int T) {
if (T % 2 == 0) return max(A, B) / min(A, B);
else return max(2*A, B) / min(2*A, B);
}
int main() {
int A = 3, B = 2, T = 3;
cout << "The return value of even odd game is " << EvenOddGame(A, B, T);
return 0;
}
ผลลัพธ์
The return value of even odd game is 3