17. 猜年龄

猜年龄

目录


题目描述

小明带两个妹妹参加元宵灯会。别人问她们多大了,她们调皮地说:“我们俩的年龄之积是年龄之和的 6 倍”。小明又补充说:“她们可不是双胞胎,年龄差肯定也不超过 8 岁啊。”

请你写出:小明的较小的妹妹的年龄。


思路分析

问题核心

我们需要找到两个年龄 ( i ) 和 ( j ),满足以下条件:

  1. 年龄之积是年龄之和的 6 倍,即 ( i \times j = 6 \times (i + j) )。
  2. 年龄差不超过 8 岁,即 ( |i - j| \leq 8 )。
  3. 两个年龄不相等(因为她们不是双胞胎)。

思路拆解

  1. 遍历可能的年龄
    • 使用双重循环遍历所有可能的年龄组合 ( (i, j) ),其中 ( i ) 和 ( j ) 都小于 100。
  2. 检查条件
    • 对于每一对 ( (i, j) ),检查是否满足 ( i \times j = 6 \times (i + j) ) 和 ( |i - j| \leq 8 )。
  3. 输出结果
    • 找到满足条件的年龄组合后,输出较小的年龄。

代码段

import java.util.Scanner;

public class Main {
    
    
    public static void main(String[] args) {
    
    
        Scanner scan = new Scanner(System.in);
        for (int i = 1; i < 100; i++) {
    
    
            for (int j = 1; j < i; j++) {
    
    
                if (i * j == 6 * (i + j) && Math.abs(i - j) <= 8) {
    
    
                    System.out.println(Math.min(i, j));
                }
            }
        }
        scan.close();
    }
}

在这里插入图片描述


代码逐行讲解

  1. 输入处理

    Scanner scan = new Scanner(System.in);
    
    • 使用 Scanner 读取输入(虽然本题不需要输入,但题目模板中包含了 Scanner)。
  2. 遍历年龄组合

    for (int i = 1; i < 100; i++) {
          
          
        for (int j = 1; j < i; j++) {
          
          
    
    • 使用双重循环遍历所有可能的年龄组合 ( (i, j) ),其中 ( i ) 和 ( j ) 都小于 100,且 ( j < i )。
  3. 检查条件

    if (i * j == 6 * (i + j) && Math.abs(i - j) <= 8) {
          
          
    
    • 检查当前年龄组合是否满足 ( i \times j = 6 \times (i + j) ) 和 ( |i - j| \leq 8 )。
  4. 输出结果

    System.out.println(Math.min(i, j));
    
    • 如果满足条件,输出较小的年龄。
  5. 关闭输入流

    scan.close();
    
    • 关闭 Scanner 以释放资源。

复杂度分析

时间复杂度

  • 双重循环遍历所有可能的年龄组合,时间复杂度为 O(100 * 100) = O(10,000)

空间复杂度

  • 只使用了常数级别的额外空间,因此空间复杂度为 O(1)

总结的知识点

  1. 输入处理

    • 使用 Scanner 读取输入(虽然本题不需要输入)。
  2. 循环与条件判断

    • 使用双重循环遍历所有可能的年龄组合。
    • 使用 if 语句检查是否满足条件。
  3. 数学计算

    • 使用 Math.abs 计算年龄差的绝对值。
    • 使用 Math.min 找到较小的年龄。

整合

import java.util.Scanner;

public class Main {
    
    
    public static void main(String[] args) {
    
    
        Scanner scan = new Scanner(System.in);
        for (int i = 1; i < 100; i++) {
    
    
            for (int j = 1; j < i; j++) {
    
    
                if (i * j == 6 * (i + j) && Math.abs(i - j) <= 8) {
    
    
                    System.out.println(Math.min(i, j));
                }
            }
        }
        scan.close();
    }
}

总结

掌握了如何使用双重循环遍历所有可能的组合,并通过条件判断找到满足特定条件的解。关键点包括:

  • 使用双重循环遍历年龄组合。
  • 使用 if 语句检查是否满足条件。
  • 使用 Math.absMath.min 进行数学计算。

猜你喜欢

转载自blog.csdn.net/weixin_74888502/article/details/146441253
今日推荐