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 |
测试用例 9 | 以文本方式显示
| 以文本方式显示
| 无限制 | 64M | 0 |
#include <stdio.h>
int main() {
int y, m, d, sum_d = 0, shang, yu, i, a[20] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
scanf("%d %d %d", &y, &m, &d);
for (i = 2012; i < y; i++) {
if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0)
sum_d = sum_d + 366;
else
sum_d = sum_d + 365;
}
if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)
a[2] = 29;
for (i = 1; i < m; i++) {
sum_d = sum_d + a[i];
}
sum_d = sum_d + d - 99;
shang = sum_d / 7, yu = sum_d % 7; //shang是周数,yu是星期几
if (yu == 6 || yu == 0)
printf("Free.\n");
else {
int p = (shang / 13) % 5, j = 2;//p是轮换的次数%5
for (; j - p + yu <= 0;)
p = p - 5;
for (; j - p + yu > 5;)
j = j - 5;
switch (yu) {
case 1:
printf("%d and %d.\n", j - p + 1, (j - p + 1 + 5) % 10);
break;
case 2:
printf("%d and %d.\n", j - p + 2, (j - p + 2 + 5) % 10);
break;
case 3:
printf("%d and %d.\n", j - p + 3, (j - p + 3 + 5) % 10);
break;
case 4:
printf("%d and %d.\n", j - p + 4, (j - p + 4 + 5) % 10);
break;
case 5:
printf("%d and %d.\n", j - p + 5, (j - p + 5 + 5) % 10);
break;
}
}
return 0;
}