本文概述
- C ++
- Java
- Python3
- C#
- 的PHP
例子:
Input :n = 5, x = 3, y = 4
Output : A
There are 5 coins, every player can pick 1 or
3 or 4 coins on his/her turn.
A can win by picking 3 coins in first chance.
Now 2 coins will be left so B will pick one
coin and now A can win by picking the last coin.Input : 2 3 4
Output : B
让我们以x = 3, y = 4的n为例。
n = 0 A不能拾取任何硬币, 因此他损失
n = 1 A可以选择1个硬币并赢得比赛
n = 2 A只能选择1个硬币。现在B将选择1个硬币并赢得比赛
n = 3 4 A将赢得3或4个硬币, 从而赢得比赛
n = 5、6 A将选择3或4个硬币。现在, B将必须从2个硬币中进行选择, 这样A才能获胜。
我们可以观察到, 只有当A输掉硬币n-1, n-x和n-y时, A才能赢取n个硬币。
C ++
//CPP program to find winner of game
//if player can pick 1, x, y coins
#include <
bits/stdc++.h>
using namespace std;
//To find winner of game
bool findWinner( int x, int y, int n)
{
//To store results
int dp[n + 1];
//Initial values
dp[0] = false ;
dp[1] = true ;
//Computing other values.
for ( int i = 2;
i <
= n;
i++) {//If A losses any of i-1 or i-x
//or i-y game then he will
//definitely win game i
if (i - 1>
= 0 and !dp[i - 1])
dp[i] = true ;
else if (i - x>
= 0 and !dp[i - x])
dp[i] = true ;
else if (i - y>
= 0 and !dp[i - y])
dp[i] = true ;
//Else A loses game.
else
dp[i] = false ;
}//If dp[n] is true then A will
//game otherwisehe losses
return dp[n];
}//Driver program to test findWinner();
int main()
{
int x = 3, y = 4, n = 5;
if (findWinner(x, y, n))
cout <
<
'A' ;
else
cout <
<
'B' ;
return 0;
}
Java
//Java program to find winner of game
//if player can pick 1, x, y coins
import java.util.Arrays;
public class GFG { //To find winner of game
static boolean findWinner( int x, int y, int n)
{
//To store results
boolean [] dp = new boolean [n + 1 ];
Arrays.fill(dp, false );
//Initial values
dp[ 0 ] = false ;
dp[ 1 ] = true ;
//Computing other values.
for ( int i = 2 ;
i <
= n;
i++) {//If A losses any of i-1 or i-x
//or i-y game then he will
//definitely win game i
if (i - 1>
= 0 &
&
dp[i - 1 ] == false )
dp[i] = true ;
else if (i - x>
= 0 &
&
dp[i - x] == false )
dp[i] = true ;
else if (i - y>
= 0 &
&
dp[i - y] == false )
dp[i] = true ;
//Else A loses game.
else
dp[i] = false ;
}//If dp[n] is true then A will
//game otherwisehe losses
return dp[n];
}//Driver program to test findWinner();
public static void main(String args[])
{
int x = 3 , y = 4 , n = 5 ;
if (findWinner(x, y, n) == true )
System.out.println( 'A' );
else
System.out.println( 'B' );
}
}
//This code is contributed by Sumit Ghosh
Python3
# Python3 program to find winner of game
# if player can pick 1, x, y coins# To find winner of game
def findWinner(x, y, n):# To store results
dp = [ 0 for i in range (n + 1 )]# Initial values
dp[ 0 ] = False
dp[ 1 ] = True# Computing other values.
for i in range ( 2 , n + 1 ):# If A losses any of i-1 or i-x
# or i-y game then he will
# definitely win game i
if (i - 1>
= 0 and not dp[i - 1 ]):
dp[i] = True
elif (i - x>
= 0 and not dp[i - x]):
dp[i] = True
elif (i - y>
= 0 and not dp[i - y]):
dp[i] = True# Else A loses game.
else :
dp[i] = False# If dp[n] is true then A will
# game otherwise he losses
return dp[n]# Driver Code
x = 3 ;
y = 4 ;
n = 5
if (findWinner(x, y, n)):
print ( 'A' )
else :
print ( 'B' )# This code is contributed by Azkia Anam
C#
//C# program to find winner of game
//if player can pick 1, x, y coins
using System;
public class GFG { //To find winner of game
static bool findWinner( int x, int y, int n)
{//To store results
bool [] dp = new bool [n + 1];
for ( int i = 0;
i <
n+1;
i++)
dp[i] = false ;
//Initial values
dp[0] = false ;
dp[1] = true ;
//Computing other values.
for ( int i = 2;
i <
= n;
i++)
{//If A losses any of i-1 or i-x
//or i-y game then he will
//definitely win game i
if (i - 1>
= 0 &
&
dp[i - 1] == false )
dp[i] = true ;
else if (i - x>
= 0 &
&
dp[i - x] == false )
dp[i] = true ;
else if (i - y>
= 0 &
&
dp[i - y] == false )
dp[i] = true ;
//Else A loses game.
else
dp[i] = false ;
}//If dp[n] is true then A will
//game otherwise he losses
return dp[n];
}//Driver program to test findWinner();
public static void Main()
{
int x = 3, y = 4, n = 5;
if (findWinner(x, y, n) == true )
Console.WriteLine( 'A' );
else
Console.WriteLine( 'B' );
}
}//This code is contributed by vt_m.
的PHP
<
?php
//PHP program to find winner of game
//if player can pick 1, x, y coins//To find winner of game
function findWinner( $x , $y , $n )
{//To store results
$dp = array ();
//Initial values
$dp [0] = false;
$dp [1] = true;
//Computing other values.
for ( $i = 2;
$i <
= $n ;
$i ++)
{//If A losses any of i-1 or i-x
//or i-y game then he will
//definitely win game i
if ( $i - 1>
= 0 and ! $dp [ $i - 1])
$dp [ $i ] = true;
else if ( $i - $x>
= 0 and ! $dp [ $i - $x ])
$dp [ $i ] = true;
else if ( $i - $y>
= 0 and ! $dp [ $i - $y ])
$dp [ $i ] = true;
//Else A loses game.
else
$dp [ $i ] = false;
}//If dp[n] is true then A will
//game otherwise he losses
return $dp [ $n ];
}//Driver program to test findWinner();
$x = 3;
$y = 4;
$n = 5;
if (findWinner( $x , $y , $n ))
echo 'A' ;
else
echo 'B' ;
//This code is contributed by anuj_67.
?>
输出如下:
A
【算法题(硬币游戏赢家,每个玩家都有三个选择)】如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。
推荐阅读
- 算法题(查找第N个素数的程序)
- 算法题(查找第N个谐波数的程序)
- 瑞士信贷技术分析师面试
- PHP上传进度条实现详细示例
- 重新排列数组,使索引相同的子集的总和与原始数组中的总和不同
- 按照数组中出现元素的顺序对链表进行排序
- 硬实时和软实时系统之间有什么区别()
- 算法题(最大的按行和按列排序的子矩阵)
- u盘打开盘自制,教您如何迅速自制一个PE系统