- Game Theory, Mathematical

Find the player who will win by choosing a number in range [1, K] with sum total N

Given two integers K and N, and also given that Alice and Bob are playing a game. In a single move, a player can choose a number in the range [1, K], and the player whose number makes the total equal to N wins the game. Print Alice if Alice wins the game, else Bob, if Alice and Bob both play the game alternatively and optimally and Alice starts the game.Examples:Input: K = 7, N = 8Output: BobExplanation: There is no way for Alice to win the game. When Alice picks any number from 1 to 7 (inclusive both), the opponent wins the game in the next turn by making the total 8 . Suppose you choose number 5, the opponent chooses 3 and wins the game, making the total 5+3=8 .Input: K = 7, N = 50Output: AliceApproach: This problem can be solved using the concept of Game Theory. Observing the winning state.The trick to catch here is that Alice can always make a cycle of (K+1) repeat, whatever Bob chooses .Assume at some point if Bob chooses a, Alice can choose [(K+1)-a]  keeping the selection within the range 1 to K and thus forming a cycle of (K+1).Now, as Alice has the first chance, Alice should choose Remainder left on Dividing N by (K+1) at the Starting so that afterwards she can keep repeating the cycle of (K+1) and achieve the total as N.Now, the observation is, if N%(K+1) is 0, it is the only case when it’s impossible to win the game for Alice.Follow the steps given below to solve the problem.Check if N%(K+1) is 0, Print Bob.In any other case, Print Alice.Below is the implementation of the above approach.C++14#include using namespace std;  void predictTheWinner(int K, int N){      if (N % (K + 1) == 0)        cout