58. 车辆限行
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; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· Apache Tomcat RCE漏洞复现(CVE-2025-24813)