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