You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hackerrank面试题:游戏获胜者判定代码测试失败,求正确解法

问题描述

John和Doe正在玩一个游戏:给定N把钥匙,其中N-1把为黄铜钥匙,1把为银钥匙,P是银钥匙的初始位置(采用1-based索引)。玩家轮流操作,每次必须选择包含银钥匙的连续M把钥匙并反转其顺序,将银钥匙移至位置X的玩家获胜,John先手,双方均采取最优策略。若无法分出胜负则输出Draw。

输入参数
N = 钥匙总数
P = 银钥匙初始位置
M = 每次反转的连续钥匙数量
X = 获胜位置
约束条件
每个输入的取值范围为1到10^6
示例

示例1:

输入:N=3,P=1,M=2,X=2
输出:John
解释:John可直接反转前2把钥匙,将银钥匙移至位置2,直接获胜。

示例2:

输入:N=4,P=1,M=2,X=4
输出:Draw
解释:双方可通过操作无限循环,无法分出胜负。

我的代码
public String solve(int N, int P, int M, int X) {
    int[] ar = new int[N];
    ar[P-1] = 1;
    for(int i=0; i<M/2; i++) {
        int x = ar[i], y = ar[M-i-1];
        ar[i] = y;
        ar[M-i-1] = x;
    }
    if(ar[X-1] == 1) return "John";
    for(int i=M; i<(M+M)/2 && i<N; i++) {
        int x = ar[i], y = ar[M+M-i-1];
        ar[i] = y;
        ar[M+M-i-1] = x;
    }
    if(ar[X-1] == 1) return "Doe";
    return "Draw";
}
遇到的问题

这段代码在Hackerrank面试提交后,有4个隐藏测试用例失败,请问该问题的正确解法是什么?

内容的提问来源于stack exchange,提问作者Learner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 02:30:52