Java 在HackerRank上发现错误,或者可能没有正确解释

Java 在HackerRank上发现错误,或者可能没有正确解释,java,Java,这是关于对策/问题的 路易斯和理查德开发了一款数字游戏。他们选择一个数字并检查它是否是2的幂。如果是,他们将其除以2。如果不是,他们将其减少下一个较小的数字,即2的幂。谁减少数量谁就赢了这场比赛。露易丝总是先开口 5个月也是如此。 *不是2的幂,我们通过重新启动下一个最接近的2的幂来减少它。5-4 = 1 路易丝赢了这场比赛 但是黑客等级给了我一个错误,告诉我应该是理查德 注:如果n=1理查兹获胜,路易斯开始比赛 我是不是遗漏了什么 对于输入n=5,根据Hackerrank,预期结果为“Ric

这是关于对策/问题的

路易斯和理查德开发了一款数字游戏。他们选择一个数字并检查它是否是2的幂。如果是,他们将其除以2。如果不是,他们将其减少下一个较小的数字,即2的幂。谁减少数量谁就赢了这场比赛。露易丝总是先开口

5个月也是如此。 *不是2的幂,我们通过重新启动下一个最接近的2的幂来减少它。5-4 = 1 路易丝赢了这场比赛 但是黑客等级给了我一个错误,告诉我应该是理查德

注:如果n=1理查兹获胜,路易斯开始比赛

我是不是遗漏了什么

对于输入n=5,根据Hackerrank,预期结果为“Richard”,但如果我读对了,预期结果应为“Louise”

这是密码

static boolean winnerIsLouise = true;

public static String counterGame(long n) {
    if (n == 1) {
        switchWinner()
        return getWinner();
    }

    while (n > 1) {
        System.out.println("winner luise : "+winnerIsLouise);
        if (isPowerOfTwo(n)){
            n=n/2;
        }else{
            n = n - previusPowerOfTwo(n);
        }
        if (n==1)
            return getWinner();
        switchWinner();
    }

    return null;
}

private static String getWinner() {
    return winnerIsLouise ? "Louise" : "Richard";
}

private static void switchWinner() {
    winnerIsLouise = !winnerIsLouise;
}


public static boolean isPowerOfTwo(long x) {

    return x != 0 && ((x & (x - 1)) == 0);
}

public static long previusPowerOfTwo(long n) {

    char[] chars = Long.toBinaryString(n).toCharArray();
    double length = chars.length - 1;
    double base = 2;
    Double res = Math.pow(base, length);
    return res.longValue();
}

while循环应该是n>=0而不是n>1吗


这将允许2^0等于1,这将使理查兹的分数降到0而不是1

正如我所怀疑的,你可能误解了结果,或者更准确地说,误解了网站的输入数据——如果你像我在上一次评论中所问的那样发布了结果,那就容易多了

来自站点的输出:

或者,作为文本,因为这将更好地显示错误:

如您所见,缺少一个输出:5不是n的值之一,它是要测试的数字计数!第一个输出,Richard,用于156834

以下是描述的相应部分:

第一行包含一个整数,即测试用例数


n被检查为1,方法返回是否相等意味着n被允许为0如果从n>0开始输入为n>0,则不可能为0,这是一个限制,所以如果n=1 richards赢,如果它的2是2的幂,那么它除以,我们得到1,Louise赢。正如Carlos Heuberger所写的,零是不可能的,但仍然是一个很好的观点,为了安全,最好考虑错误输入的可能性。如果n>0,可能需要检查一下,如果n我想我找到了描述,则返回。初始条件正确吗?如果路易丝开始时n=1,她不应该放松吗?如果他们最初将计数器设置为1,理查德获胜。路易丝无法移动,所以她输了。路易丝开始winnerIsLouise=true;还有另一条规则:如果他们最初将计数器设置为1,则更新,Richard将获胜。没错,但您的代码显示Louise在以n=1开始时获胜,而不是Richard,因为您刚刚确认。。这是我这边的错误。但问题本身是针对第5位,很难相信他们在如此明显的情况下做得不对,你确定你正确地解释了错误信息吗?无论如何,那应该在那里讨论。根据你给出的描述,n=5应该会导致Louise被hackerrank.com的一些解决方案所证实
Input (stdin)        Expected Output

  5                    Richard
  1560834...           Richard
  1768820...           Louise
  1533726...           Richard
  1620434...           Louise
  1463674...