算法-生理周期(枚举-java)

简介: 算法-生理周期(枚举-java)

一、题目介绍

人有体力、情商、智商的高峰日子,它们分别每隔23天、28天和33天出现一次。 对于每个人,我们想知道何时三个高峰落在同一天。给定三个高峰出现的日子p,e 和 i(不一定是第一次高峰出现的日子),再给定另一个指的日子d,你的任务是输出日子 d 之后 ,下一次三个高峰落在同天的日子(用距离 d 的天数表示 )。例如:给定日子为10,下次出现三个高峰同一天的日子是12,则输出2。


输入

输入四个整数:p,e,i和d。p,e,i分别表示体力 、情感和智力高峰出现的日子 。d是给定的日子,可能小于p,e或i。所有给定日子是非负的并且小于或等365,所求的日子小于或等21252。


输出

从给定日子起,下一次三个高峰同一天的日子(距离给定日子的天数)。

输入样例

0 0 0 0

0 0 0 100

5 20 34 325

4 5 6 7

283 102 23 320

203 301 203 40

-1 -1 -1 -1


输出样例

Case 1: the next triple peak occurs in 21252 days.

Case 2: the next triple peak occurs in 21152 days.

Case 3: the next triple peak occurs in 19575 days.

Case 4: the next triple peak occurs in 16994 days.

Case 5: the next triple peak occurs in 8910 days.

Case 6: the next triple peak occurs in 10789 days.


二、题目思路

根据枚举思路,最简方法是从所输入天数f,第f+1天开始,一个一个试到21252天,对于每一天day满足:


(day-p)%23 ==0 && (day-e)%28 ==0 && (day-i)%33 ==0


但是这样的话虽然简单但是很麻烦,不妨这样想,先找到一个体力值高峰p之后(一天天试day++),然后在此情况下每隔23天找情商高峰e(day+=23),之后找智商高峰期(day=23*28),写三个没有循环体的循环for(;条件;条件;);不满足时自动结束循环。


代码

代码如下:

import java.util.Scanner;
//生理周期 p e i
public class class1 {
  public static void main(String[]args) {
    int p,e,i,d;
    Scanner s = new Scanner(System.in);
    System.out.println("请分别输入四个整数p,e,i,d(0<=*<=365):");
    p = s.nextInt();
    e = s.nextInt();
    i = s.nextInt();
    d = s.nextInt();
    int day = d+1;
    for(;(day-p)%23!=0;day++);
    for(;(day-e)%28!= 0;day+=23);
    for(;(day-i)%33!= 0;day+=23*28);
    int find = day-d;
    System.out.println("下一个高峰期是在"+find+"天后");
    }
}


总结

学习用枚举思路来简单化题目,善学善思。

相关文章
|
1月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
69 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
18天前
|
安全 Java 测试技术
🎉Java零基础:全面解析枚举的强大功能
【10月更文挑战第19天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
101 60
|
2月前
|
安全 Java 索引
Java——反射&枚举
本文介绍了Java反射机制及其应用,包括获取Class对象、构造方法、成员变量和成员方法。反射允许在运行时动态操作类和对象,例如创建对象、调用方法和访问字段。文章详细解释了不同方法的使用方式及其注意事项,并展示了如何通过反射获取类的各种信息。此外,还介绍了枚举类型的特点和使用方法,包括枚举的构造方法及其在反射中的特殊处理。
62 9
Java——反射&枚举
|
1月前
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
104 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
1月前
|
算法 Java 数据中心
探讨面试常见问题雪花算法、时钟回拨问题,java中优雅的实现方式
【10月更文挑战第2天】在大数据量系统中,分布式ID生成是一个关键问题。为了保证在分布式环境下生成的ID唯一、有序且高效,业界提出了多种解决方案,其中雪花算法(Snowflake Algorithm)是一种广泛应用的分布式ID生成算法。本文将详细介绍雪花算法的原理、实现及其处理时钟回拨问题的方法,并提供Java代码示例。
67 2
|
2月前
|
Java
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
81 5
|
2月前
|
安全 Java 开发者
Java 枚举(enum)详解
Java 中的枚举(`enum`)是一种特殊的数据类型,用于定义一组固定的常量,提升代码的类型安全性和可读性。枚举使用 `enum` 关键字定义,支持方法和构造函数,具有类型安全、单例、自动序列化等特点,并且可以遍历和用于 `switch` 语句中。实际应用包括状态机、指令集、类型标识等场景。枚举使代码更加清晰易维护。
|
1月前
|
算法 Java Linux
java制作海报一:java使用Graphics2D 在图片上写字,文字换行算法详解
这篇文章介绍了如何在Java中使用Graphics2D在图片上绘制文字,并实现自动换行的功能。
92 0
|
1月前
|
算法 Java 测试技术
数据结构 —— Java自定义代码实现顺序表,包含测试用例以及ArrayList的使用以及相关算法题
文章详细介绍了如何用Java自定义实现一个顺序表类,包括插入、删除、获取数据元素、求数据个数等功能,并对顺序表进行了测试,最后还提及了Java中自带的顺序表实现类ArrayList。
19 0
|
3月前
|
设计模式 缓存 算法
揭秘策略模式:如何用Java设计模式轻松切换算法?
【8月更文挑战第30天】设计模式是解决软件开发中特定问题的可重用方案。其中,策略模式是一种常用的行为型模式,允许在运行时选择算法行为。它通过定义一系列可互换的算法来封装具体的实现,使算法的变化与客户端分离。例如,在电商系统中,可以通过定义 `DiscountStrategy` 接口和多种折扣策略类(如 `FidelityDiscount`、`BulkDiscount` 和 `NoDiscount`),在运行时动态切换不同的折扣逻辑。这样,`ShoppingCart` 类无需关心具体折扣计算细节,只需设置不同的策略即可实现灵活的价格计算,符合开闭原则并提高代码的可维护性和扩展性。
63 2