提交记录 #474
提交时间:2024-12-10 15:45:44
语言:c
状态:Unaccepted
编译情况:编译成功
固定测试点#1:
固定测试点#2:
固定测试点#3:
固定测试点#4:
固定测试点#5:
固定测试点#6:
固定测试点#7:
附加测试点暂不可用
54【日期】车辆限行
#include <stdio.h>
// 定义限行尾号的轮换顺序
int limitp[4][10] = {
{3, 8, 4, 9, 5, 0, 1, 6, 2, 7}, // 第1个周期
{2, 7, 3, 8, 4, 9, 5, 0, 1, 6}, // 第2个周期
{1, 6, 2, 7, 3, 8, 4, 9, 5, 0}, // 第3个周期
{5, 0, 1, 6, 2, 7, 3, 8, 4, 9} // 第4个周期
};
// 计算从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; // 计算当前周期的第几天
// 输出当前天的限行尾号和下一天的限行尾号
printf("%d and %d.\n", limitp[index][day_index], 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;
}