蓝桥杯 算法提高 日期计算
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 算法提高 日期计算 时间限制:1.0s 内存限制:256.0MB 问题描述 已知2011年11月11日是星期五,问YYYY年MM月DD日是星期几?注意考虑闰年的情况。尤其是逢百年不闰,逢400年闰的情况。 输入格式 输入只有一行 YYYY MM DD 输出格式 输出只有一行 W 数据规模和约定 1599 <= YYYY <= 2999 1 <= MM <= 12 1 <= DD <= 31,且确保测试样例中YYYY年MM月DD日是一个合理日期 1 <= W <= 7,分别代表周一到周日 样例输入 2011 11 11 样例输出 5 |
c++:
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 using namespace std; 5 6 int a[2][13]={{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}}; 7 8 bool isRun(int year){//判断是否为闰年 9 if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0) 10 return true; 11 return false; 12 } 13 14 int calDay(int year){ 15 int index = 0; 16 if(!isRun(year)) index = 1; 17 int tot = 0; 18 for(int i=1; i<=12; ++i) 19 tot += a[index][i]; 20 return tot; 21 } 22 23 int Day(int y, int m, int d){//计算从0年0月0日到y年m月d日的时间天数 24 int ans = 0; 25 for(int i=1; i<y; ++i) 26 ans+=calDay(i); 27 int index = 0; 28 if(!isRun(y)) index = 1; 29 for(int i=1; i<m; ++i) 30 ans += a[index][i]; 31 ans += d; 32 return ans; 33 } 34 35 int main(){ 36 int y, m, d; 37 cin>>y>>m>>d; 38 int diff = Day(y, m, d) - Day(2011, 11, 11);//已知2011-11-11这一天是星期5 39 if(diff > 0) cout<<(4+diff%7)%7+1<<endl; 40 else{ 41 for(int i=1; i<=7; ++i) 42 if((i-1 + -diff%7)%7 + 1 == 5){ 43 cout<<i<<endl; 44 break; 45 } 46 } 47 return 0; 48 }
本文来自博客园,作者:hjzqyx,转载请注明原文链接:https://www.cnblogs.com/hujunzheng/p/4395845.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端