C++實現的奇偶輪流遊戲(兩個整數)
在這個問題中,我們得到三個整數值 A、B 和 T。我們的任務是建立一個程式來玩 *兩個整數的奇偶輪流遊戲*。
兩個整數值為:
T,表示遊戲中的回合數。
A 表示玩家1的值。
B 表示玩家2的值。
如果 T 的值為奇數,則 A 的值乘以 2。
如果 T 的值為偶數,則 B 的值乘以 2。
我們需要找到並返回最終 *max(A, B) / min(A, B)* 的值。
讓我們舉個例子來理解這個問題:
**輸入:** A = 3, B = 4, T = 3
輸出:1
解釋:
第一輪:T 為奇數,A 乘以 2,A = 6。
第二輪:T 為偶數,B 乘以 2,B = 8。
第三輪:T 為奇數,A 乘以 2,A = 12。
A = 12 B = 8
max(A, B) = max(12, 8) = 12
min(A, B) = min(12, 8) = 8
max(A, B) / min(A, B) = 12 / 8 = 1.5
解決方案:
一個簡單的解決方案是計算 T 輪後 A 和 B 的值,然後返回 max(A, B) / min(A, B) 的值。這是一個透過 T 次迭代的有效解決方案。
但是,可以根據這樣一個事實找到更有效的解決方案:對於 T 的偶數值,新的 A 值為 N*A,新的 B 值為 N*B。
這使得 max(A, B) / min(A, B) 的值是一個常數,等於
max(A, B) / min(A, B)。
如果 T 的值為奇數,則 A 的值為 2*N*A,B 的值為 N*B。
這使得 max(A, B) / min(A, B) 的值是一個常數,等於 max(2A, B) / min(2A, B)。
問題的最終結果 max(A, B) / min(A, B) =
max(A, B) / min(A, B),如果 T 為偶數
max(2A, B) / min(2A, B),如果 T 為奇數
程式說明解決方案的工作原理:
示例
#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); }
輸出:
The return value of even odd game is 3