POJ 4148 生理周期:下一个同时出现体力高峰、感情高峰、智力高峰的时间

本文探讨了一种高效算法,用于找出三个不同周期(体力、感情、智力)的高峰首次同时出现的具体日期。通过避免不必要的计算,该方法显著提高了搜索速度,利用最小公倍数原理,快速定位目标日期。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                                                                                                                                 点击此处返回总目录

 

 

【题目】

 

 

 

【分析】

给定三个整数表示出现了三个高峰,并不一定是第一次出现高峰的日子。反正是这一天出现了高峰。

 

首先想到的方法是: 从d+1开始往后试一直试到21252天,对于每一个日子d,我们看是不是三个高峰同时出现的日子。三个高峰同时出现满足什么条件呢? (d-p)%23 == 0 且 (d-e)%28 == 0 且 (d-i)%33==0 。

 

但是这个方法比较慢。很多日期可以跳过,不用去做判断。也就是说我们要想办法怎么试的更快一点,这是枚举里面的核心问题,虽然枚举说就是一个个试,但是往往实际解决问题的时候,是不需要每一个都试到的,有些明显不是答案的我们试都不试。在这个题目里面,所谓的试就是,代入上面的式子进行判断。但是在这个题目里面,对于好多的d,根本就不需要尝试就可以排除了。

 

到底怎么试呢?

基本思想是:如果找到了一个体力高峰,那么从这个体力高峰到下一个体力高峰之间的日子根本都不用试。因此,我们可以想办法找到一个体力高峰的日子,然后就每隔一个体力高峰的周期去做一下尝试。每隔一个体力高峰的周期的日子肯定是体力高峰了,只需要判断是不是感情高峰的日子。直到找到了一个即是体力高峰又是感情高峰的日子,接下来做尝试的时候就只需要试双高峰的日子。体力和感情双高峰的日子,他们出现的间隔是多长呢?当然就是两个间隔的最小公倍数。所以当找到了体力高峰和感情高峰的共同日子以后,接下来尝试的间隔就变成了体力高峰周期和感情高峰周期的最小公倍数,直到试到一个日子同时也是智力高峰。

 

 

【代码】


 

 

【结果】

自己测试结果:

 

提交结果:

 

 

【总结】

当然本题还有一些数学方法,比如中国剩余定理等,我们也不参加竞赛,面试中也不会考。

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值