首页 > 其他分享 >58. 车辆限行

58. 车辆限行

时间:2022-12-26 19:24:30浏览次数:47  
标签:58 int 车辆 date 文本 day 限行 2012

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 以文本方式显示
  1. 2012 7 9↵
以文本方式显示
  1. 2 and 7.↵
无限制 64M 0
测试用例 2 以文本方式显示
  1. 2012 7 12↵
以文本方式显示
  1. 5 and 0.↵
无限制 64M 0
测试用例 3 以文本方式显示
  1. 2012 7 14↵
以文本方式显示
  1. Free.↵
无限制 64M 0
测试用例 5 以文本方式显示
  1. 2013 4 11↵
以文本方式显示
  1. 2 and 7.↵
无限制 64M 0
测试用例 6 以文本方式显示
  1. 2014 4 4↵
以文本方式显示
  1. 5 and 0.↵
无限制 64M 0
测试用例 7 以文本方式显示
  1. 2014 4 5↵
以文本方式显示
  1. Free.↵
无限制 64M 0
测试用例 9 以文本方式显示
  1. 2014 3 31↵
以文本方式显示
  1. 1 and 6.↵
无限制 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

相关文章