原题链接:薛定谔的时间旅行
解题思路:
该题说白了就是求明年的今天是星期几。
闰年,共366天
平年,共365天
比如17年8月16到18年8月16就过去了365天,到19年8月16就是730天,以此类推,一个星期七天, 如果这个数字能被7整除,那就是那一年没错啦;
注意事项:
分三种情况 a. 2月28号之前(从当年判断是否为闰年)
b.3月1号之后(从下一年判断是否为闰年)
c. 输入的刚好是闰年的2月29日(非得闰年才有这一天)
参考代码:
#include <stdio.h> int runnian(int year); int runnian(int year) //判断闰年 { if((year%4==0)&&(year%100!=0)||(year%400==0)) return 366; else return 365; } int main() { int t,sum=0; int i; int year,mounth,day; char arr[10000][11]; //存储几组数据 scanf("%d",&t); for(i=0;i<t;i++) { scanf("%s",arr[i]); } for(i=0;i<t;i++) //从字符串中分离出我们需要用到的 年 月 日等信息 { sum=0; year=(arr[i][0]-'0')*1000+(arr[i][1]-'0')*100+(arr[i][2]-'0')*10+(arr[i][3]-'0'); mounth=(arr[i][5]-'0')*10+(arr[i][6]-'0'); day=(arr[i][8]-'0')*10+(arr[i][9]-'0'); while(1) { if(mounth<=2&&day<29) //2月28之前 { sum+=runnian(year); if(sum%7==0) { printf("%d\n",year+1); break; } else year++; } else if(mounth==2&&day==29) //2月29当天 { sum+=runnian(year+1); if(sum%7==0&&runnian(year+1)==366) { printf("%d\n",year+1); break; } year++; } else //3月1日之后 { sum+=runnian(year+1); if(sum%7==0) { printf("%d\n",year+1); break; } year++; } } } return 0; }
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复