提交记录 #478
提交时间:2024-12-10 16:06:47
语言:c
状态:Unaccepted
编译情况:编译成功
固定测试点#1:
固定测试点#2:
固定测试点#3:
固定测试点#4:
固定测试点#5:
固定测试点#6:
固定测试点#7:
附加测试点暂不可用
54【日期】车辆限行
#include <stdio.h>
// 定义限行尾号的轮换顺序(每组绑定)
int limitp[4][5][2] = {
{ {3, 8}, {4, 9}, {5, 0}, {1, 6}, {2, 7} }, // 第1个周期(2012年4月9日至2012年7月7日)
{ {2, 7}, {3, 8}, {4, 9}, {5, 0}, {1, 6} }, // 第2个周期(2012年7月8日至2012年10月6日)
{ {1, 6}, {2, 7}, {3, 8}, {4, 9}, {5, 0} }, // 第3个周期(2012年10月7日至2013年1月5日)
{ {5, 0}, {1, 6}, {2, 7}, {3, 8}, {4, 9} } // 第4个周期(2013年1月6日至2013年4月10日)
};
// 计算从2012年4月9日到指定日期的天数差
int calculate_days(int year, int month, int day) {
int days_in_m[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int days = 0;
// 计算从2012年到目标年份之间的天数
for (int y = 2012; y < year; y++) {
days += (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0) ? 366 : 365;
}
// 计算目标年份中从1月到目标月份之间的天数
for (int m = 1; m < month; m++) {
days += days_in_m[m - 1];
if (m == 2 && ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))) {
days += 1; // 闰年2月多一天
}
}
// 加上目标日期与2012年4月9日的差值
days += day - 9;
return days;
}
// 根据天数差计算限行尾号
void calculate_limit(int days) {
int l = 91; // 每13周(91天)一个周期
int index = (days / l) % 4; // 计算当前周期的索引
int day_index = days % 5; // 计算当前周期的第几天
// 判断是否为周六或周日
if (day_index >= 5) { // 周六和周日(day_index >= 5)
printf("Free.\n");
} else {
// 输出当天的限行尾号
printf("{%d and %d}.\n", limitp[index][day_index][0], limitp[index][day_index][1]);
}
}
int main() {
int year, month, day;
scanf("%d%d%d", &year, &month, &day);
int days = calculate_days(year, month, day);
calculate_limit(days);
return 0;
}