编写一个算法来判断一个数是不是“快乐数”。 一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和, 然后重复这个过程直 到这个数变为 1,也可能是无限循环但始终变不到 1

通过题意,可以举列子计算,找出其规律
示例:
输入: 19 输出: true 解释:
1+9^9= 82
8^2 +2^8 = 68
6^2 + 8^2= 100
1^2=1
输入:18
1+8^2=63;
6^2 +3^2=45
4^2 +5^2=41
4^2+1=17
1+7^2=50
5^2=25
2^2+ 5^2=29
2^2 +9^2=85
8^2 +5^2=89
8^2 +9^2=155
1+5^2 +5^2=51
5^2+1=26
2^2 +6^2=40
4^2=16
输入:20
2^2=4
4^2=16
1+6^2=37
3^2+ 7^2=58
5^2+ 8^2=89
……
由以上可得出,89不是快乐数,则其他数算到89时,其数也不会是快乐数,因此89可以当结点来判断任意数是否为快乐数。利用方法之一判断任意数经计算是否为快乐数,方法之二获取下一个需计算的数字。
代码如下:

public class Test1{
    public static void main(String[] args) {
          System.out.println(isHappy(18));
          System.out.println(isHappy(19));
       }
       public static boolean isHappy(int n){   //判断数字是否为快乐数
            int temp = n;
            while(true){
                temp = getNum(temp);
                if (temp == 1) {
                    return true;
                }else if (temp == 89) {    //89作为不是快乐数的结点
                    return false;
                }
            }
      }
       public static int getNum(int n){  //获取下一个数字
        int result = 0;
        while (n > 0) {
            result += (n % 10) * (n %10);
            n = n / 10;
        }
        return result;
    }
}

在这里插入图片描述

<think>我们被要求编写一个程序来判断一个是否是快乐快乐定义如下: 对于一个正整数每一次将该替换为它每个位置上的数字平方和,然后重复这个过程到这个变为1,也可能无限循环始终不到1。如果可以变为1,那么这个就是快乐。 例如,19 是一个快乐1^2 + 9^2 = 82 8^2 + 2^2 = 68 6^2 + 8^2 = 100 1^2 + 0^2 + 0^2 = 1 思路: 1. 我们需要一个来计算一个的各位数字平方和。 2. 然后,我们不断重复计算这个平方和到得到1(是快乐)或者进入循环(不是快乐)。 3. 如何检测循环?我们可以使用一个集合(HashSet)来记录出现过的数字,一旦某个数字重复出现,就说明进入了循环。 步骤: - 初始化一个空的集合,用于存储出现过的数字。 - 将输入的数字加入集合。 - 循环计算下一个数字平方和): 如果下一个数字1,返回true(是快乐)。 如果下一个数字已经在集合中出现过,返回false(不是快乐)。 否则,将下一个数字加入集合,并继续循环。 注意:输入的数字应该是正整数,但为了程序的健壮性,我们可以考虑非正整数的情况(非正整数不是快乐)。 参考引用[2]中关于控制台输入的方法,我们将使用Console.ReadLine()来读取用户输入,并使用int.TryParse来转换,避免异常(参考引用[3]中的输入处理方式)。 代码结构: 1. 主程序:获取用户输入,验证输入,然后调用判断,输出结果。 2. 判断:实现上述快乐判断逻辑。 3. 辅助函:计算一个的各位数字平方和。 我们将按照这个思路编写代码。</think>### C# 判断快乐的控制台程序 快乐定义:对于一个正整数,每次将该替换为它每个位置上的数字平方和重复这个过程到这个变为 1,或者进入不包含 1 的循环。如果能最终得到 1,则这个就是快乐[^1]。 以下是完的 C# 控制台程序实现: ```csharp using System; using System.Collections.Generic; namespace HappyNumberChecker { class Program { static void Main(string[] args) { Console.WriteLine("快乐判断程序"); Console.WriteLine("----------------"); Console.Write("请输入一个正整数: "); // 使用 TryParse 安全处理输入(参考引用[2][3]) if (int.TryParse(Console.ReadLine(), out int number) && number > 0) { if (IsHappyNumber(number)) { Console.WriteLine($"{number} 是快乐!"); } else { Console.WriteLine($"{number} 不是快乐。"); } } else { Console.WriteLine("输入无效,请输入一个正整数。"); } Console.WriteLine("\n按任意键退出..."); Console.ReadKey(); } // 判断是否为快乐的方法 static bool IsHappyNumber(int n) { HashSet<int> seen = new HashSet<int>(); while (n != 1 && !seen.Contains(n)) { seen.Add(n); n = CalculateDigitSquareSum(n); } return n == 1; } // 计算数字平方和的方法(参考引用[1]的位分解思路) static int CalculateDigitSquareSum(int num) { int sum = 0; while (num > 0) { int digit = num % 10; // 获取最后一位数字 sum += digit * digit; // 平方累加 num /= 10; // 移除最后一位(参考引用[1]) } return sum; } } } ``` #### 代码说明 1. **输入处理**(参考引用[2][3]) - 使用 `int.TryParse()` 安全转换输入,避免异常 - 验证输入为正整数 2. **核心算法** - **数字分解**:通过 `% 10` 获取末位数字,`/ 10` 移除末位(参考引用[1]) - **平方和计算**:`CalculateDigitSquareSum` 方法计算各位数字平方和 - **循环检测**:使用 `HashSet` 记录出现过的数字,检测循环 3. **快乐判断逻辑**(参考定义) - 不断计算数字平方和 - 当结果为 1 时返回 true - 当检测到重复数字时返回 false(进入循环) #### 运行示例 ``` 快乐判断程序 ---------------- 请输入一个正整数: 19 19 是快乐! 按任意键退出... ``` ``` 快乐判断程序 ---------------- 请输入一个正整数: 4 4 不是快乐。 按任意键退出... ``` #### 验证示例 - **19 是快乐**:$1^2 + 9^2 = 82$ → $8^2 + 2^2 = 68$ → $6^2 + 8^2 = 100$ → $1^2 + 0^2 + 0^2 = 1$ - **4 不是快乐**:$4^2 = 16$ → $1^2 + 6^2 = 37$ → $3^2 + 7^2 = 58$ → $5^2 + 8^2 = 89$ → $8^2 + 9^2 = 145$ → 进入循环 此程序在 Visual Studio 中可接运行,使用了安全的输入处理和高效的算法实现。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值