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

更新於:2021年1月22日

瀏覽量:203

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告