OpenJudge - 2977:生理周期
2024-09-06 04:06:45
原题链接
总时间限制: 1000ms 内存限制: 65536kB
描述
人生来就有三个生理周期,分别为体力、感情和智力周期,它们的周期长度为23天、28天和33天。每一个周
期中有一天是高峰。在高峰这天,人会在相应的方面表现出色。例如,智力周期的高峰,人会思维敏捷,精
力容易高度集中。因为三个周期的周长不同,所以通常三个周期的高峰不会落在同一天。对于每个人,我们
想知道何时三个高峰落在同一天。对于每个周期,我们会给出从当前年份的第一天开始,到出现高峰的天数
(不一定是第一次高峰出现的时间)。你的任务是给定一个从当年第一天开始数的天数,输出从给定时间开
始(不包括给定时间)下一次三个高峰落在同一天的时间(距给定时间的天数)。例如:给定时间为10,下
次出现三个高峰同天的时间是12,则输出2(注意这里不是3)。
输入
一行,包含四个整数:p, e, i和d,相邻两个整数之间用单个空格隔开。
p, e, i分别表示体力、情感和智力高峰出现的时间(时间从当年的第一天开始计算)。
d 是给定的时间,可能小于p, e, 或 i。
所有给定时间是非负的并且小于等于365, 所求的时间小于等于21252。
输出
一个整数,即从给定时间起,下一次三个高峰同天的时间(距离给定时间的天数)。
样例输入
4 5 6 7
样例输出
16994
思路
注意题面“不包括给定时间”,所以枚举应该从d+1开始。
解法一:无脑暴力
#include<iostream>
using namespace std;
int main(){
int p,e,i,d;
cin>>p>>e>>i>>d;
int k=d+1;
for(;k<=21252;k++)
if((k-p)%23==0&&(k-e)%28==0&&(k-i)%33==0)break;
cout<<k-d<<endl;
return 0;
}
解法二:
认真观察可以发现,一种属性的高峰与这个属性的下一个高峰间
不可能存在三种属性共同的高峰。所以枚举的时候可以跳着枚举。
#include<iostream>
using namespace std;
int main(){
int p,e,i,d;
int k;
for(k=d+1;(k-p)%23;k++);
for(;(k-e)%28;k+=23);
for(;(k-i)%33;k+=23*28);
cout<<k-d<<endl;
return 0;
}
小结
这题很简单,但却说明了即使是枚举,根据题意也有可能可以做简单优化。
最新文章
- IIS 启用CORS ,IISExpress 通过IP 访问
- [Machine Learning] 梯度下降法的三种形式BGD、SGD以及MBGD
- json提交
- WPF中ComboBox绑定数据库自动读取产生数据
- http请求返回响应码的意思
- CASS转ARCGIS
- CSS3的属性为什么要带前缀
- Hybrid App开发之JavaScript基础
- 一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx、supervisor、mysql环境搭建
- Oracle在本地调试成功读取数据,但是把代码放到服务器读不出数据的解决方法。
- 010_React-组件的生命周期详解
- angular中的服务
- Java设计模式从精通到入门五 抽象工厂方法模式
- Fragment跳转至Activity片段随笔
- Criteria查询
- Fiddler设置代理后,iphone手机无法访问网络的全面解决办法
- Hg(Mercurial)版本管理学习
- Winform重画ComboBox背景色
- 设计模式(java)--状态模式
- 【bzoj4698】[Sdoi2008] Sandy的卡片 后缀数组
热门文章
- sudo apt-get update 与 sudo apt-get upgrate 的区别
- 黑马程序员_毕向东_Java基础视频教程——变量(随笔)
- 手把手numpy教程【二】——数组与切片
- Bash Shell之内建命令和保留字
- 【遗传编程/基因规划】Genetic Programming
- TCP三次握手的seq和ack号的【正确】理解
- Crystal | 水晶方法的七大特征,你了解吗?
- MySQL 间隙锁
- 索引 &#39;GXHRCS.PK_A253&#39; 或这类索引的分区处于不可用状态
- 30分钟快速上手Docker,看这篇就对了!