原题链接:薛定谔的时间旅行
解题思路:
该题说白了就是求明年的今天是星期几。
闰年,共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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复