我的任务是从10打印所有喜欢的数字,直到程序打印 连续3个号码。这3个数字应该是1880 1881和1882。 我写了while(num2< 1883)只是为了让循环停止。 我应该比较最后的3个"总和"并在连续时停止循环。
do {
num = num2;
while (num > 0 || sum > 9) {
if (num == 0) {
num = sum;
sum = 0;
}
sum += Math.pow(num % 10, 2);
num /= 10;
}
if (sum == 1) {
counter++;
System.out.println(counter + ") " + num2 + " is a happy number :-)");
}
num2++;
sum = 0;
} while (num2 < 1883);//<---?????
答案 0 :(得分:1)
您应该有一个包含连续找到的数字的列表。并循环直到此列表的长度为3.在循环内部检查您的候选人是否是一个快乐的数字。如果是将其添加到列表中。如果它没有清除列表,因为您还没有达到连续的满意号码。退出循环后,List包含找到的三个连续的快乐号码。
List<Integer> foundNumbers = new ArrayList<Integer>();
int candidate = 10;
while(foundNumbers.length < 3) {
if(isHappyNumber(candidate)) {
foundNumbers.add(candidate);
System.out.println(candidate + " is a happy number");
} else {
foundNumbers.clear();
}
candidate ++;
}
//Print the list members
答案 1 :(得分:1)
一般格式为:
int lastHappyNumber = 0;
int currentHappyNumber = 0;
int thirdLastSum = 0;
int secondLastSum = 0;
int firstLastSum = 0;
do {
currentHappyNumber = getNextHappyNumber(); // <--- fill in with your logic
thirdLastSum = secondLastSum;
secondLastSum = firstLastSum;
firstLastSum = lastHappyNumber + currentHappyNumber;
lastHappyNumber = currentHappyNumber;
}
while ((thirdLastSum + 1) == secondLastSum && (secondLastSum + 1) == firstLastSum);
由于这是一项任务,我将为您计算幸福数字,但我们的想法是每次迭代,您将最后3个总和向下移动然后进行比较。一旦找到有效的解决方案(其中最后三个总和是连续的整数),lastHappyNumber
的值保存解决问题的满意数字。 lastHappyNumber = currentHappyNumber
确保在下一次迭代期间,将存储最后一个满意的数字,并允许执行总和计算。