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

开启你的职业生涯

通过完成课程获得认证

开始学习
广告