习题文章题解均在博客英雄哪里出来可以找到,博主在这里记录自己的刷题过程及解题报告,想刷题可以找英雄哥,人特比特别好,如果你有毅力并且坚持下去跟着他你会有想不到的提升。加油兄弟们。写这个题解也是想通过csdn这个平台监督自己,进而获得提升,希望自己坚持下去,加油啊!!!
- 今天的题:《算法零基础100讲》(第6讲) 日期算法_英雄哪里出来-CSDN博客
这篇文章吧周期算法补全一下
#include<math.h>
bool is_leap_year(int y){
if(y%4==0&&y%100!=0||y%400==0){
return true;
}
return false;
}
int getdate(char *date){
int year,mounth,day,sumday;
int mounthday[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
sscanf(date,"%d-%d-%d",&year,&mounth,&day);
//如果是闰年就加上366天否则就加上365天
int i=0;
for(i=1971;i<year;++i){
sumday+=(is_leap_year(i)?366:365);
}
//累加月数
mounthday[2]=is_leap_year(year)?29:28;
for(i=1;i<mounth;i++){
sumday+=mounthday[i];
}
sumday+=day;
return sumday;
}
int daysBetweenDates(char * date1, char * date2){
return abs(getdate(date1)-getdate(date2));
}
//判断闰年or平年
bool is_leap_year(int y){
if(y%4==0&&y%100!=0||y%400==0){
return true;
}
return false;
}
int StroInt(char*str,int len){
int i=0;
int sum=0;
for(i=0;i<len;i++){
sum=sum*10+(str[i]-'0');
}
return sum;
}
int dayOfYear(char * date){
//判断闰年还是平年
//枚举12个月份的天数 1 2 3 4 5 6 7 8 9 10 11 12
int mounthday[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
//将date字符串提取成数字
int year,mounth,day;
year =StroInt(date+0,4);
mounth =StroInt(date+5,2);
day = StroInt(date+8,2);
//月份+日=天数
int sumday[13];
sumday[0]=0;
//2月特殊
mounthday[2]=is_leap_year(year)?29:28;
//累加本月的前几个月的天数
for(int i=1;i<mounth;++i){
sumday[i]=sumday[i-1]+mounthday[i];
}
//累加月的天数+本月的天数
return sumday[mounth-1]+day;
}
char * dayOfTheWeek(int day, int month, int year){
char * week[7] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
int monthDays[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30};
/* 输入年份之前的年份的天数贡献 */
int days = 365 * (year - 1971) + (year - 1969) / 4;
//举例 为什么要-1969年 因为四年一润 而1972年刚好是闰年 1972-1969 = 3 ,而3/4 = 0
//,对输入的1972年如果月份大于3 在下面多加一天 这里就不加了 ,所以减去1969。
/* 输入年份中,输入月份之前的月份的天数贡献 */
for (int i = 0; i < month - 1; ++i) {
days += monthDays[i];
}
if ((year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) && month >= 3) {
days += 1;
}
/* 输入月份中的天数贡献 */
days += day;
return week[(days + 3) % 7];
}