2101 - 13号

很简单的一个问题,帮我们统计一下每个月的十三号是星期几。我们的计算的起点为1900年1月1日(包含这一天),计算终点为1900 + X - 1年 12月31日。输出

13号一共落在周一,周二,周三,周四,周五,周六,周日多少次


题目输入

第一行一个整数X  (X ≤ 400)

题目输出

七个空格分开的整数,分别是13号落在周六,周日,周一,周二,周三,周四, 周五的次数

输入/输出样例

题目输入

20

题目输出

36 33 34 33 35 35 34

C语言解答

#include<stdio.h>
int nianpanduan(int a)
{
	if(a%100!=0&&a%4==0||a%400==0)
	return 1;
	return 0;
}
main()
{
	int month[13]={0,12,31,28,31,30,31,30,31,31,30,31,30};
	int mon,tue,wed,thu,fri,sat,sun,sum,i,j,n;
	while(scanf("%d",&n)!=EOF)
	{
		mon=0;tue=0;wed=0;thu=0;fri=0;sat=0;sun=0;
		for(i=1900,sum=0;i<1900+n;i++)
		for(j=1;j<=12;j++)
		{
			sum+=month[j];
			if(j==3&&nianpanduan(i)==1)
			{
			sum++;
			}
			if(sum%7==0)
			mon++;
			if(sum%7==1)
			tue++;
			if(sum%7==2)
			wed++;
			if(sum%7==3)
			thu++;
			if(sum%7==4)
			fri++;
			if(sum%7==5)
			sat++;
			if(sum%7==6)
			sun++;
			if(j==12)
			sum+=19;
		}
		printf("%d %d %d %d %d %d %d\n",sat,sun,mon,tue,wed,thu,fri);
	}
}

C++解答

/*
ID:crazysona
PROB:friday
LANG:C++
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int isleap(int y)
{
    return y % 4==0 && (y % 100 != 0 || y % 400 == 0);
}

int mtab[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };


int mlen(int y, int m)
{
    if(m == 1)
        return mtab[m]+isleap(y);
    else
        return mtab[m];
}

int main(void)
{
    int i, m, dow, n, y;
    int ndow[7];
	//freopen("2.in", "r", stdin);
	//freopen("2.out", "w", stdout);
    while(scanf("%d", &n) != EOF){

    for(i=0; i<7; i++)
        ndow[i] = 0;

    dow = 0;
    for(y=1900; y<1900+n; y++) {
        for(m=0; m<12; m++) {
            ndow[dow]++;
            dow = (dow+mlen(y, m)) % 7;
        }
    }

    for(i=0; i<7; i++) {
        if(i)
            printf(" ");
        printf("%d", ndow[i]);
    }
    printf("\n");
    }

    return 0;
}

时间限制 1 秒
内存限制 128 MB
讨论 统计
上一题 下一题