首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >给出在给定(输入)范围内的快乐数字的数量

给出在给定(输入)范围内的快乐数字的数量
EN

Stack Overflow用户
提问于 2021-10-08 11:03:36
回答 2查看 73关注 0票数 0

作为练习,我需要编写一个代码,它将给出给定范围内的快乐数字*的数量。作为测试,我需要在检查10个不同结果的程序中插入代码,对于每个好的结果,你会得到4分。我想要完整的40分,我的老师说我只需要在我的代码中做一点修改。到目前为止,我有这样的想法:

*快乐数字是一个数字,当用每个数字的平方和替换时,它最终会达到1。例如,13是一个快乐的数字,因为1^2 + 3^2 = 10和1^2 + 0^2 =1

重要的是要知道:当你最终得到一个4,这绝对不是一个快乐的数字。

代码语言:javascript
运行
复制
import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String st1 = scan.nextLine().trim();
        String st2 = scan.nextLine().trim();

        int min = Integer.parseInt(st1);
        int max = Integer.parseInt(st2);

        Set<Integer> happyNumbers = getHappyNumbers(min, max);
        System.out.println(happyNumbers.size());

    }

    public static Set<Integer> getHappyNumbers(int min, int max) {
        Set<Integer> out = new HashSet<>();
        for (int i = min; i < max; i++) {
            if (isHappy(i)) {
                out.add(i);
            }
        }
        return out;
    }

    private static boolean isHappy(int i) {
        int sum = 0;
        while (i != 0) {
            sum += Math.pow((i % 10), 2);
            i /= 10;
        }
        if (sum == 4) return false;
        else if(sum == 1) return true;
        else if (sum !=1) {return isHappy(sum);}
        else return true;
    }
}

我的老师还说,错误在以下部分:

代码语言:javascript
运行
复制
if (sum == 4) return false;
        else if(sum == 1) return true;
        else if (sum !=1) {return isHappy(sum);}
        else return true;

请帮助:)

EN

Stack Overflow用户

发布于 2021-10-08 11:28:41

代码语言:javascript
运行
复制
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;

public class HappyNumbersMain {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.print("Lower limit (>0): ");
        String st1 = scan.nextLine().trim();
        System.out.print("Upper limit: ");
        String st2 = scan.nextLine().trim();

        int min = Integer.parseInt(st1);
        int max = Integer.parseInt(st2);

        Set<Integer> happyNumbers = getHappyNumbers(min, max);
        System.out.println("Happy numbers between " + min + " and " + max + ":" + happyNumbers);
    }

    public static Set<Integer> getHappyNumbers(int min, int max) {
        Set<Integer> out = new TreeSet<>();
        for (int i = min; i <= max; i++) {
            if (isHappy(i)) {
                out.add(i);
            }
        }
        return out;
    }

    private static boolean isHappy(int i) {
        // Stopping conditions
        if (i == 4) {
            return false;
        } else if (i == 1) {
            return true;
        }

        int sum = 0;
        while (i > 0) {
            sum += Math.pow((i % 10), 2);
            i /= 10;
        }

        return isHappy(sum);
    }
}

以上工作与预期一致,请注意以下几点:

  1. 在执行递归函数时,将停止条件作为它检查的第一件事
  2. 向用户添加一些反馈有助于理解如何使用
  3. 排序值,HashSet不会,更适合于显示目的
  4. 您应该始终验证用户输入(我没有这样做,但您应该这样做)
票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69494830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档