日期类问题---今天是周几以及今天是今年的第几天~

xiaoxiao2021-02-28  31

OK,刷题继续,这次是日期类问题。

首先明确:闰年是年份能被4整除且不能被100整除  或者 能被400整除的年份。

第一个题:

            输入年、月、日,计算该天是本年的第几天。

                                                                    ---来源牛客网

        输入描述:

        包括三个整数年(1<=Y<=3000)、月(1<=M<=12)、日(1<=D<=31)

        输入:

        1990 9 20         2000 5 1     输出:         263         122

            解题思路:判断是否是闰年,之后根据月份来计算天数。

 代码:

#include<iostream> using namespace std; int main() { int year,month,day; while(cin>>year>>month>>day) { int Month[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; int number = 0; if(( (year%4==0) && (year0!=0) ) || (year@0==0))//闰年 { Month[2] = Month[2] + 1; } for(int i = 1; i < month; i++) { number += Month[i]; } number += day; cout<<number<<endl; } }

第二个题:

            输入日期,判断当前是星期几

                                            -----来源王道考研机试指南

        输入:

            9 October 2001

            14 October 2001

        输出:

            Tuesday

            Sunday

        解题思路:计算输入日期与当前日期的天数差,然后根据当前的星期数,计算得到输入日期的星期数。天数差可以提前计算得到,以一个自己指定的日期为基数。分别计算两个日期与基数的差,然后就可以得到两个 日期的天数差。

#include<stdio.h> #include<string.h> #define YEAP(x) x@0 == 0|| x0!=0 && x%4==0?1:0//闰年为1,非闰年为0 using namespace std; int DayOfMonth[13][2] ={ 0,0, 31,31, 28,29, 31,31, 30,30, 31,31, 30,30, 31,31, 31,31, 30,30, 31,31, 30,30, 31,31 }; char NameOfMonth[13][20]={ " ", "January","February","March","April","May","June", "July","August","September","October","November","December" }; char NameOfWeekday[7][20]={ "Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday" }; struct Date{ int Day; int Month; int Year; void Next_Day() { Day++; if(Day > DayOfMonth[Month][YEAP(Year)])//判断天数是否大于当前月的天数,如果大于则月数加一,day置1 { Day = 1; Month++; if(Month>12) { Month = 1; Year++; } } } }; int Buf[3001][13][32]; int main() { int cnt = 0; Date tmp; tmp.Year = 0; tmp.Month = 1; tmp.Day = 1; while(tmp.Year<3001)//计算3000年的差值 { Buf[tmp.Year][tmp.Month][tmp.Day] = cnt; tmp.Next_Day(); cnt++; } int d1,m1,y1; char m[20]; while(scanf("%d%s%d",&d1,m,&y1)!=EOF) { for(m1=1;m1<12;m1++) { if(strcmp(NameOfMonth[m1],m)==0) break; } int days = Buf[y1][m1][d1]-Buf[2018][4][10]; days += 2; puts(NameOfWeekday[(days%7+7)%7]); } return 0; } 以后再仔细弄吧,现在时间不太够了~

转载请注明原文地址: https://www.6miu.com/read-2632260.html

最新回复(0)