📜  在第i步中找到捐赠i糖果游戏的赢家

📅  最后修改于: 2021-04-17 17:25:41             🧑  作者: Mango

鉴于两个整数XY分别代表分配给玩家AB糖果,其中两个玩家在捐赠的沉迷游戏的数量糖果对手在每一个i举动。从玩家A开始,游戏交替进行,直到玩家无法捐赠所需数量的糖果并输掉游戏为止,任务是找到游戏的获胜者。

例子:

方法:想法是基于以下观察结果解决问题:

请按照以下步骤解决问题

  1. 初始化两个变量,分别是机会A机会B,代表玩家拥有的糖果数量减少到0的移动次数。
  2. 由于玩家A的糖果数在奇数步中减少1,因此机会A = 2 *(X – 1)+ 1
  3. 由于玩家B的糖果数在均匀移动中减少1,因此偶然机会B = 2 * Y
  4. 如果机会A <机会B ,则B将是获胜玩家。
  5. 否则, A将是获胜者。
  6. 打印获胜的玩家。

下面是上述方法的实现:

C++
// C++ Program for the
// above approach
  
#include 
using namespace std;
  
// Function to find the winning
// player in a game of donating i
// candies to opponent in i-th move
int stepscount(int a, int b)
{
    // Steps in which number of
    // candies of player A finishes
    int chanceA = 2 * a - 1;
  
    // Steps in which number of
    // candies of player B finishes
    int chanceB = 2 * b;
  
    // If A's candies finishes first
    if (chanceA < chanceB) {
        cout << "B";
    }
  
    // Otherwise
    else if (chanceB < chanceA) {
        cout << "B";
    }
  
    return 0;
}
  
// Driver Code
int main()
{
    // Input
  
    // Candies possessed
    // by player A
    int A = 2;
  
    // Candies possessed
    // by player B
    int B = 3;
  
    stepscount(A, B);
  
    return 0;
}


输出:
B

时间复杂度: O(1)
辅助空间: O(1)