- 習題文章題解均在部落格英雄哪裡出來可以找到,博主在這裡記錄自己的刷題過程及解題報告,想刷題可以找英雄哥,人特位元別好,如果你有毅力並且堅持下去跟著他你會有想不到的提升。加油兄弟們。寫這個題解也是想通過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];
}