推荐专栏
相关习题
1185. 一周中的第几天
Constraints:
The given dates are valid dates between the years 1971 and 2100.
分析:
- 题目给定的年份范围是[1971,2100],然后我们可以根据力扣的数据测试得出1971年1月1日是Friday,当然不嫌麻烦的话也可以去查日历。
- 既然知道初始条件,那目前最简单暴力的方法就是直接计算他们相差有多少天。
- 因为一周的周期为七天,所以要计算出这一天是一周的第几天我们只需计算 daycnt % 7,但又因为因为初始日期是Friday,所以daycnt的初始条件是4。
代码如下:
char Week[7][10] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
char * dayOfTheWeek(int day, int month, int year){
//daycnt的初始条件
int cnt = 4;
//记录每月的天数
int Month[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
for(int y = 1971; y < year; y++){
//判断是否为闰年
if(y % 100 != 0 && y % 4 == 0 || y % 400 == 0)
cnt+=366;
else
cnt+=365;
}
for(int i = 1; i < month; i++){
//判断2月的天数
if(i == 2){
if(year % 100 != 0 && year % 4 == 0 || year % 400 == 0)
cnt += 29;
else
cnt+=Month[i];
}
else
cnt+=Month[i];
}
cnt+=day;
cnt%=7;
return Week[cnt];
}
1154. 一年中的第几天
这道题相对上题较为简单,只需计算本年的天数,唯一难受的地方就是他给的是字符串,但将字符串转化为整型数据的问题已经有人帮我们解决了,所以我们只需拿来用就行,atoi()函数是一个将表示数字的字符串转化为整型数据的一个函数,转化之后一切都简单起来了。
代码如下:
int dayOfYear(char * date){
int daycnt = 0;
int year, month, day;
int Month[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
char* str = (char*)malloc(12);
//转化年份
strcpy(str, date);
str[4] = '\0';
year = atoi(str);
//转化月份
strcpy(str, date + 5);
str[2] = '\0';
month = atoi(str);
//转化日期
strcpy(str, date + 8);
day = atoi(str);
//计算天数
for(int i = 1; i < month; i++){
if(i == 2){
if(year % 100 != 0 && year % 4 == 0 || year % 400 == 0)
daycnt += 29;
else
daycnt += Month[i];
}
else
daycnt += Month[i];
}
daycnt += day;
return daycnt;
}