东华大学2020考研计算机OJ题目解答分享——进阶篇(14)

14 黑色星期五

作者: xxx时间限制: 1S章节: 一维数组

问题描述 :

13号又是星期五是一个不寻常的日子吗? 13号在星期五比在其他日少吗?为了回答这个问题,写一个程序来计算在n年里13 日落在星期一,星期二…星期日的次数.这个测试从1900年1月1日到 1900+n-1年12月31日.n是一个非负数且不大于400.

这里有一些你要知道的: 1900年1月1日是星期一. 4,6,11和9月有30天.其他月份除了2月都有31天.闰年2月有29天,平年2月有28天.

输入说明 :

一个整数n(1<= n <= 400).

输出说明 :

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

输入范例 :

20

输出范例 :

36 33 34 33 35 35 34

解答思路:

看清楚输出的顺序

AC代码

#include <stdio.h>
#include <string.h>
#include <math.h>

int day[2][12]={31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31,30,31};

int isrun(int y)
{
	if(y%4!=0)
	{
		return 0;
	}
	else
	{
		if(y%100==0&&y%400!=0)
		{
			return 0;
		}
		else
		{
			return 1;
		}
	}
}

int  main()
{
	int n;
	scanf("%d",&n);
	int sy=1900,sm=1,sd=1,week=0;
	int weeks[7];
	memset(weeks,0,sizeof(weeks));
	while(sy!=1900+n-1||sm!=12||sd!=31)
	{
		if(sd==13)
		{
			weeks[week%7]++;

		}

	
		sd++;
		week++;

		if(sd>day[isrun(sy)][sm-1])
			{
				sm++;
				sd=1;
			}
			if(sm==13)
			{
				sy++;
				sm=1;

			}

	}

	for(int i=0;i<7;i++)
	{
		printf("%d",weeks[(i+5)%7]);
		if(i!=6)
		{
			printf(" ");
		}

	}


}
发布了61 篇原创文章 · 获赞 5 · 访问量 2458

猜你喜欢

转载自blog.csdn.net/qq_38344326/article/details/104635421
今日推荐