一、题目介绍
人有体力、情商、智商的高峰日子,它们分别每隔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+"天后"); } }
总结
学习用枚举思路来简单化题目,善学善思。