解题思路:

        该题说白了就是求明年的今天是星期几。

        闰年,共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;
	
}


点赞(3)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 1 条评论

岚朋友 2年前 回复TA
这个有问题吧。2000-2-29会输出2006年