找到所有喜欢的数字直到

时间:2018-04-06 14:26:13

标签: java while-loop

我的任务是从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);//<---?????

2 个答案:

答案 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确保在下一次迭代期间,将存储最后一个满意的数字,并允许执行总和计算。