其他分享
首页 > 其他分享> > 黑色星期五

黑色星期五

作者:互联网

题目描述
13号又是星期五是一个不寻常的日子吗?
13号在星期五比在其他日少吗?为了回答这个问题,写一个程序来计算在n年里13
日落在星期一,星期二…星期日的次数.这个测试从1900年1月1日到
1900+n-1年12月31日.n是一个非负数且不大于400.
这里有一些你要知道的:
bullet 1900年1月1日是星期一.
bullet 4,6,11和9月有30天.其他月份除了2月有31天.闰年2月有29天,平年2月有28天.
bullet 年份可以被4整除的为闰年(1992=4*498 所以 1992年是闰年,但是1990年不是闰年)
bullet 以上规则不适合于世纪年.可以被400整除的世纪年为闰年,否则为平年.所以,1700,1800,1900和2100年是平年,而2000年是闰年.请不要预先算好数据!

输入
一个整数n.

输出
七个在一行且相分开的整数,它们代表13日是星期六,星期日,星期一…星期五的次数.

样例输入
20

样例输出
36 33 34 33 35 35 34

代码如下

#include<stdio.h>

int num[1010];
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int isyear(int y)
{
	if(y%4==0&&y%100!=0||y%400==0)
	return 1;
	else
	return 0;
}                                       
int main(void)                          
{                                       
	int n,fact;                               
	int year=1900,month=1,day=13,week=6;
	scanf("%d",&n);                     
	for(int i=year;i<=year+n-1;i++)     
	{                                   
		if(isyear(i)==1)//判断闰年的情况                
			a[2]=29;                    
		else                            
			a[2]=28;                    
		for(int j=1;j<=12;j++)//遍历每年所有月份          
		{                
			num[week]++;  
			fact=a[j]%7;         
			week=(week+fact)%7;//更新日期
		}                               
	}                                   
	printf("%d ",num[6]);
	for(int i=0;i<=5;i++)
		printf("%d ",num[i]);
}

标签:13,黑色,闰年,int,31,30,星期五,1900
来源: https://blog.csdn.net/lymww/article/details/115799392