通过选择范围[1,K]内的一个数字,并加上总数 N
来找到获胜的玩家
原文:https://www . geeksforgeeks . org/通过选择一个范围内的数字来找到获胜的玩家-总数为 n 的 1-k/
给定两个整数 K 和 N ,同时也给定爱丽丝和鲍勃正在玩游戏。单次移动,玩家可以选择【1,K】范围内的一个数字,其数字使总数等于 N 的玩家获胜。打印爱丽丝如果爱丽丝赢了游戏,否则鲍勃,如果爱丽丝和鲍勃都交替且最优地玩游戏和爱丽丝开始游戏。
*例:***
*输入:* K = 7,N = 8 输出:鲍勃 说明:爱丽丝没有办法赢得比赛。当爱丽丝从 1 到 7(包括 1 和 7)中选择任何一个数字时,对手在下一轮通过使总数为 8 赢得比赛。假设你选 5 号,对手选 3,赢了比赛,总比分是 5+3=8。
*输入:* K = 7,N = 50 T3】输出:爱丽丝
*进场:*这个问题可以用博弈论的概念来解决。观察获胜状态。这里要抓住的诀窍是爱丽丝总是可以进行(K+1) 重复的循环,无论鲍勃选择什么。假设在某个时刻 Bob 选择 a , Alice 可以选择 [(K+1)-a] 将选择保持在1 到 K 的范围内,从而形成(K+1) 的循环。现在爱丽丝有了第一次机会,爱丽丝应该选择 开始时 N 除以(K+1) 剩下的余数,这样之后她就可以继续重复(K+1) 的循环,达到总数为 N 。 现在的观察是,如果 N%(K+1)为 0 ,则是爱丽丝不可能赢得比赛的唯一情况。 按照下面给出的步骤解决问题。****
- 检查 N%(K+1)是否为 0,打印鲍勃。
- 在任何其他情况下,打印爱丽丝。
下面是上述方法的实现。
C++14
// C++ program for above approach
#include <iostream>
using namespace std;
// Function to predict the winner
void predictTheWinner(int K, int N)
{
if (N % (K + 1) == 0)
cout << "Bob";
else
cout << "Alice";
}
// Driver Code
int main()
{
// Given Input
int K = 7, N = 50;
// Function call
predictTheWinner(K, N);
return 0;
}
Java 语言(一种计算机语言,尤用于创建网站)
// Java program for the above approach
import java.io.*;
class GFG {
// Function to predict the winner
static void predictTheWinner(int K, int N)
{
if (N % (K + 1) == 0)
System.out.println( "Bob");
else
System.out.println("Alice");
}
// Driver Code
public static void main (String[] args) {
// Given Input
int K = 7, N = 50;
// Function call
predictTheWinner(K, N);
}
}
// This code is contributed by Potta Lokesh
Python 3
# Python 3 program for above approach
# Function to predict the winner
def predictTheWinner(K, N):
if (N % (K + 1) == 0):
print("Bob")
else:
print("Alice")
# Driver Code
if __name__ == '__main__':
# Given Input
K = 7
N = 50
# Function call
predictTheWinner(K, N)
# This code is contributed by SURENDRA_GANGWAR.
C#
// C# program for the above approach
using System;
public class GFG {
// Function to predict the winner
static void predictTheWinner(int K, int N)
{
if (N % (K + 1) == 0)
Console.WriteLine( "Bob");
else
Console.WriteLine("Alice");
}
// Driver Code
public static void Main (string[] args) {
// Given Input
int K = 7, N = 50;
// Function call
predictTheWinner(K, N);
}
}
// This code is contributed by AnkThon
java 描述语言
<script>
// javascript program for above approach
// Function to predict the winner
function predictTheWinner(K, N)
{
if (N % (K + 1) == 0)
document.write("Bob");
else
document.write("Alice");
}
// Driver Code
// Given Input
var K = 7, N = 50;
// Function call
predictTheWinner(K, N);
// This code is contributed by ipg2016107.
</script>
**Output:
Alice
**
*时间复杂度:O(1) T5辅助空间: O(1)*
版权属于:月萌API www.moonapi.com,转载请注明出处