Java代码基础算法练习-年龄问题-2024.05.07

news/2024/11/14 21:10:17/

数学家维纳智力早熟,11岁就上了大学。一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:“我年龄的立方是个4位数。我年龄的4次方是个6位数。这10 个数字正好包含了从0到9这10个数字,每个都恰好出现1次。”请你编程计算,他当时到底有多年轻。 注意:使用循环实现,输出他的年龄占一行。


解决思路:

要解决这个问题,我们可以采用穷举法,因为年龄作为一个整数,其范围是有限的。根据题目条件,我们知道维纳的年龄满足以下条件:

  1. 年龄的立方是一个四位数。
  2. 年龄的四次方是一个六位数。
  3. 这两个数包含0-9所有数字各一次。

因此,我们可以通过编写一个循环,从最小可能的年龄开始(考虑到立方是四位数,至少从10开始),一直到一个合理的上限(由于四次方是六位数,最大不会超过20左右,因为20的四次方已经超过了七位数)。在循环中,计算每个年龄的立方和四次方,然后检查这两个数是否包含了0-9这10个数字各一次。


代码示例:

package May_2024;import java.util.HashSet;
import java.util.Set;public class m240507_2 {public static void main(String[] args) {// 从10岁开始,到一个合理的年龄上限,比如20岁for (int age = 10; age <= 20; age++) {String cube = Integer.toString(age * age * age); // 年龄的立方String fourthPower = Integer.toString(age * age * age * age); // 年龄的四次方// 合并两个字符串,用于检查是否包含0-9每个数字各一次String combined = cube + fourthPower;// 使用HashSet来检查是否有重复或遗漏的数字if (containsAllDigitsOnce(combined)) {System.out.println(age);return; // 找到答案后退出循环}}}// 辅助方法:检查字符串中是否包含0-9每个数字各一次private static boolean containsAllDigitsOnce(String str) {if (str.length() != 10) return false; // 先检查总长度是否为10,避免不必要的后续检查Set<Integer> uniqueDigits = new HashSet<>(); // 创建一个HashSet来存储不重复的数字for (char ch : str.toCharArray()) {if (ch < '0' || ch > '9') return false; // 如果字符串中有非数字字符,直接返回false/* ch - '0' 的计算方式是将字符ch的ASCII值减去字符'0'的ASCII值。* 例如,如果ch是字符'5',其ASCII值为53,* 那么ch - '0'的结果是53 - 48 = 5。* 这个结果就是数组digits的索引,表示数字5。*/int digit = ch - '0'; // 将字符转换为数字if (!uniqueDigits.add(digit)) { // 尝试向HashSet添加数字,如果添加失败(已存在),则返回falsereturn false;}}return true; // 没有返回false,说明所有数字都出现了一次}}


http://www.ppmy.cn/news/1459856.html

相关文章

Java毕业设计 基于SpringBoot vue社区智慧养老监护管理平台

Java毕业设计 基于SpringBoot vue社区智慧养老监护管理平台 SpringBoot 社区智慧养老监护管理平台 功能介绍 登录注册 个人中心 修改密码 个人信息 房间信息管理 房间入住信息管理 反馈信息管理 留言管理 老人信息管理 公告管理 物资申请管理 管理员管理 护工管理 体检员管理…

前端科举八股文-JAVASCRIPT篇

前端科举八股文-JAVASCRIPT篇 Js的变量类型&#xff0c;区别是什么平时有用过symbol吗函数闭包的理解?js的原型链&#xff1f; Function Function.constructor 返回值&#xff1f;promise的出现是为了解决什么问题&#xff1f;前端中的事件流事件委托?js的new操作符做了哪些…

net 7部署到Linux并开启https

1.修改代码设置后台服务运行 安装nuget包 Install-Package Microsoft.Extensions.Hosting.WindowsServices Install-Package Microsoft.Extensions.Hosting.Systemd在Program代码中设置服务后台运行 var builder WebApplication.CreateBuilder(args);if (System.OperatingS…

探索生产者/消费者模式:解决并发编程中的资源竞争

序言 在并发编程中&#xff0c;资源竞争是一个常见的问题。为了有效地管理资源并确保线程安全&#xff0c;需要采用一些有效的方法。其中之一是生产者/消费者模式&#xff0c;它是一种经典的并发设计模式&#xff0c;用于解决生产者和消费者之间的协作问题。本文将深入探讨生产…

TCP 连接,一端断电和进程崩溃有什么区别?

TCP 连接&#xff0c;一端断电和进程崩溃有什么区别&#xff1f; 前言主机崩溃进程崩溃有数据传输的场景客户端主机宕机&#xff0c;又迅速重启客户端主机宕机&#xff0c;一直没有重启 总结 前言 有的小伙伴在面试腾讯的时候&#xff0c;遇到了这么个问题&#xff1a; 这个属…

【Leetcode 42】 接雨水-单调栈解法

基础思路&#xff1a; 维持栈单调递减&#xff0c;一旦出现元素大于栈顶元素&#xff0c;就可以计算雨水量&#xff0c;同时填坑&#xff08;弹出栈顶元素&#xff09; 需要注意&#xff1a; 单调栈通常保存的是下标&#xff0c;用于计算距离 public static int trap2(int[…

Apache ECharts

Apache ECharts介绍&#xff1a; Apache ECharts 是一款基于 Javascript 的数据可视化图表库&#xff0c;提供直观&#xff0c;生动&#xff0c;可交互&#xff0c;可个性化定制的数据可视化图表。 官网地址&#xff1a;https://echarts.apache.org/zh/index.html Apache ECh…

【力扣】LCR 166.珠宝的最高价值

原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 目录 1.题目描述 2.思路分析 3.代码实现 1.题目描述 现有一个记作二维矩阵 frame 的珠宝架&#xff0c;其中 frame[i][j] 为该位置珠宝的价值。拿取珠宝的规则为&#xff1a; 只能从架子的左上角开始拿珠宝…