C语言车辆限行

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

#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;
}

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值