提交记录 #467
提交时间:2024-12-10 12:42:55
语言:c
状态:Unaccepted
编译情况:编译成功
固定测试点#1:
固定测试点#2:
固定测试点#3:
固定测试点#4:
固定测试点#5:
固定测试点#6:
固定测试点#7:
附加测试点暂不可用
54【日期】车辆限行
#include <stdio.h>
// 定义限行尾号的轮换顺序
int limit_cycle[4][5] = {
{3, 8, 4, 9, 5}, // 2012年4月9日至2012年7月7日
{2, 7, 3, 8, 4}, // 2012年7月8日至2012年10月6日
{1, 6, 2, 7, 3}, // 2012年10月7日至2013年1月5日
{5, 0, 1, 6, 2} // 2013年1月6日至2013年4月10日
};
// 计算从2012年4月9日到指定日期的天数差
int calculate_days(int year, int month, int day) {
int days_per_month[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int days = 0;
// 计算从2012年4月9日到指定日期的天数差
for (int y = 2012; y < year; y++) {
days += (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0) ? 366 : 365;
}
for (int m = 1; m < month; m++) {
days += days_per_month[m - 1];
if (m == 2 && ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))) {
days += 1; // 闰年2月多一天
}
}
days += day - 9; // 减去2012年4月9日的天数
return days;
}
// 根据天数差计算限行尾号
void calculate_limit_number(int days) {
int cycle_length = 91; // 每13周(91天)一个周期
int cycle_index = (days / cycle_length) % 4; // 计算当前周期的索引
int day_index = days % 5; // 计算当前周期的第几天
printf("%d and %d.\n", limit_cycle[cycle_index][day_index], limit_cycle[cycle_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_number(days);
return 0;
}