Cho A, B, T. Nhiệm vụ: trò chơi chẵn lẻ với hai số nguyên.
Luật chơi:
- Lượt lẻ (T lẻ): A = A * 2.
- Lượt chẵn (T chẵn): B = B * 2.
Sau T lượt, tính max(A, B) / min(A, B).
Ví dụ:
Đầu vào: A = 3, B = 4, T = 3
Đầu ra: 1
Giải thích:
Lượt 1 (lẻ): A=6
Lượt 2 (chẵn): B=8
Lượt 3 (lẻ): A=12
A=12, B=4 (wait, B should be 8? Example says B=4? Let's re-check: original says B=4 after turn 3? Actually original example: "B = 4" but B was 4 initially, then turn 2 B=8, turn 3 no change to B. So final A=12, B=8. max/min = 12/8 = 1 (integer division). Output 1 matches.)
Phương pháp giải
Mô phỏng T lượt O(T).
Tối ưu O(1):
- T chẵn: A, B đều nhân cùng hệ số => tỷ số max/min không đổi = max(A,B)/min(A,B).
- T lẻ: A nhân thêm 2 => tỷ số = max(2A, B)/min(2A, B).
Chương trình minh họa
Ví dụ
#include <iostream>
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));
return -1;
}
int main() {
int A = 3, B = 2, T = 3;
cout << "The return value of even odd game is " << EvenOddGame(A, B, T);
}
Kết quả
The return value of even odd game is 3