【日期】车辆限行

    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月10日,星期一至星期五限行机动车车牌尾号分别为:5和0、1和6、2和7、3和8、4和9。

现给出 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 周进行一次轮换计算就可以了。)

#include <stdio.h>
int f(int x)
{
	if(x%4==0&&x%100!=0||x%400==0) return 1;
	else return 0;
}
int g(int x)
{
	if(x<1) return g(x+5);
	else if(x>5) return g(x-5);
	else return x;
}
main()
{
	int year,month,date,day=-100,m,n,b;
	int a[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}};
	scanf("%d %d %d",&year,&month,&date);
	if(year==2012) day++;
	while(--year>2011) day+=f(year)+365;
	while(--month) day+=a[f(year)][month];
	day+=date;m=day/7/13;n=day%7;
	if(n==5||n==6) printf("Free.\n");
	else 
	{
	    b=g(g(3-m)+n);
		if(b!=5) printf("%d and %d.\n",b,b+5); 
		else printf("5 and 0.\n");
	}
}

递归,算术

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值