gpt4 book ai didi

java - Java中的isHappy函数

转载 作者:行者123 更新时间:2023-12-01 06:14:55 24 4
gpt4 key购买 nike

我正在尝试创建一个 isHappy 方法,如果给定的整数是一个快乐的数字,则该方法将返回 True,否则返回 false。

如果一个数字可以通过重复计算其数字的平方和而达到数字 1,那么这个数字就是幸福的。例如397是一个快乐的数字:

397 -> 139 -> 91 -> 82 -> 100 -> 1

不高兴的数字会循环,因此永远不会达到 1。 123 不是一个快乐的数字:

123 -> 14 -> 17 -> 50 -> 25 -> 29 -> 85 -> 89 -> 145 -> 42 -> 20 -> 4 -> 16 -> 37 -> 58 -> 89 -> ...

为了确定一个数字是否满意,我尝试使用递归算法,该算法需要维护三个额外的项目。 1) 一个已经见过的数字,将记住固定的步数,2) 我们将记住这个数字的剩余步数,以及 3) 一旦我们忘记了这个数字,我们会记住这个数字多长时间我们看到的下一个数字(比记住的最后一个数字长一步)。

当我们记住的数字与序列中的下一个数字相同时,我们知道我们已经到达一个循环,然后可以停止。

这是我的代码:

public static boolean isHappy(int n) {
assert n > 0 : "n should be positive";
// Post: Returns true if a number is 'happy', unless false.
return checkHappiness (n, n/2, n/8, n/16);
}

private static boolean checkHappiness (int n, int r, int t, int nt) {
// A (hidden) helper function of 'isHappy' that counts additional parameters.
if (n == 1) return true;
else if (n == r) return false;
else if (t > 0) return checkHappiness (sumSquareDigits (n),r,t-1,nt);
else if (t == 0) return checkHappiness (n+1, n, nt, nt+1);
return true;
}

我应该提到辅助函数的参数是:当前数字 (n)、当前被记住的数字 (r)、该数字将被记住多长时间 (t) 以及下一个数字的时间量记住的数字将被记住 (nt)。

除了 2 的情况外,它工作得很好。出于某种原因,它认为 2 是一个快乐的数字,但事实并非如此!谁能看到我的错误在哪里?谢谢!

最佳答案

从它的外观来看,(我无法运行它来检查)问题似乎出在这里:

else if (n == r) return false;

数字 2 重复以下模式:

2, 4, 16, 37, 58, 89, 145, 42, 20, 4, 16, ...

但是,它永远不会等于原始数字 2。因此 if 会失败

关于java - Java中的isHappy函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27029983/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com