58. 车辆限行
2012年4月1日,北京是人民政府根据《中华人民共和国道路交通安全法》和《北京市实施〈中华人民共和国大气污染防 治法〉办法》有关规定,自2012年4月11日起,继续对机动车实施按车牌尾号工作日高峰时段 区域限行交通管理措施。
根据规定,按车牌尾号限行的机动车车牌尾号分为五组,每13周轮换一次限行日,分别为:
(1) 自2012年4月9日至2012年7月7日,星期一至星期五限行机动车车牌尾号分别为:3和8、4和9、5和0、1和6、2和7(含临时号牌,机动车车牌尾号为英文字母的按0号管理,下同);
(2) 自2012年7月8日至2012年10月6日,星期一至星期五限行机动车车牌尾号分别为:2和7、3和8、4和9、5和0、1和6;
(3) 自2012年10月7日至2013年1月5日,星期一至星期五限行机动车车牌尾号分别为:1和6、2和7、3和8、4和9、5和0;
(4) 自2013年1月6日至2013年4月6日,星期一至星期五限行机动车车牌尾号分别为:5和0、1和6、2和7、3和8、4和9。
(5)自2013年4月7日至2013年7月6日,星期一至星期五限行机动车车牌尾号分别为:4和9、5和0、1和6、2和7、3和8。
现给出 2012 年 4 月 9 日之后的任意日期,如果不考虑国家统一的公假,只考虑日期一个因素,请计算指定日期要限行的车牌尾号。
(政府的公告确实有点意思,在时间衔接上和限号安排上公告(http://unn.people.com.cn/GB/14748/17574443.html)与公告(http://www.gov.cn/gzdt/2013-04/02/content_2367908.htm)之间有重叠,显然,后面的公告是覆盖前面的公告的,我们计算的时候,只能是“理论”上的事情,咱严格按照从 2012年4月9日 星期一 开始,每 13 周进行一次轮换计算就可以了。)
测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
---|---|---|---|---|---|
测试用例 1 | 以文本方式显示
|
以文本方式显示
|
无限制 | 64M | 0 |
测试用例 2 | 以文本方式显示
|
以文本方式显示
|
无限制 | 64M | 0 |
测试用例 3 | 以文本方式显示
|
以文本方式显示
|
无限制 | 64M | 0 |
测试用例 5 | 以文本方式显示
|
以文本方式显示
|
无限制 | 64M | 0 |
测试用例 6 | 以文本方式显示
|
以文本方式显示
|
无限制 | 64M | 0 |
测试用例 7 | 以文本方式显示
|
以文本方式显示
|
无限制 | 64M | 0 |
测试用例 9 | 以文本方式显示
|
以文本方式显示
|
无限制 | 64M | 0 |
【分析】:
需要判断星期,
累加天数,记为n,然后n%7计算星期,n/(7*13)计算轮回次数
【代码】:
#include <stdio.h>
#define GAP 100
static int calulatedMonth[2][13] = { {0,0,31,59,90,120,151,181,212,243,273,304,334},
{0,0,31,60,91,121,152,182,213,244,274,305,335} };
int main() {
int day = 0, week = 0, week_13 = 0;
int strict_day_carnum[5][6][2] =
{
{{0,0},{3,8},{4,9},{5,0},{1,6},{2,7}},
{{0,0},{2,7},{3,8},{4,9},{5,0},{1,6}},
{{0,0},{1,6},{2,7},{3,8},{4,9},{5,0}},
{{0,0},{5,0},{1,6},{2,7},{3,8},{4,9}},
{{0,0},{4,9},{5,0},{1,6},{2,7},{3,8}}
};
int date_day, date_month, date_year;
scanf("%d %d %d", &date_year, &date_month, &date_day);
int n = calulater(date_year, date_month, date_day);
day = n % 7;
if (day == 0 || day == 6) puts("Free.");
else {
week_13 = n / (7 * 13);
printf("%d and %d.\n", strict_day_carnum[week_13%5][day][0], strict_day_carnum[week_13 % 5][day][1]);
}
return 0;
}
int calulater(int year, int month, int day)
{
int n = 0;
for (int tyear = 2012; tyear < year; tyear++)
if (tyear % 4 == 0 && tyear % 100 != 0 || tyear % 400 == 0) n += 366;
else n += 365;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) return n + calulatedMonth[1][month] + day - GAP+1;
else return n + calulatedMonth[0][month] + day - GAP+1;
}
标签:58,int,车辆,date,文本,day,限行,2012 From: https://www.cnblogs.com/alien-han/p/17004683.html