提交记录 #482
提交时间:2024-12-10 16:38:05
语言:c
状态:Unaccepted
编译情况:编译成功
固定测试点#1:
固定测试点#2:
固定测试点#3:
固定测试点#4:
固定测试点#5:
固定测试点#6:
固定测试点#7:
附加测试点暂不可用
54【日期】车辆限行
#include <stdio.h>
// 定义限行尾号的轮换顺序(每组绑定)
int limitp[7][2] = {
{3, 8}, // 余数为0
{4, 9}, // 余数为1
{5, 0}, // 余数为2
{1, 6}, // 余数为3
{2, 7}, // 余数为4
{3, 8}, // 余数为5
{4, 9} // 余数为6
};
// 计算从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 remainder = days % 7; // 对7取余
// 输出当天的限行尾号
printf("%d and %d.\n", limitp[remainder][0], limitp[remainder][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;
}