列表

详情


NC22891. 黑色星期五

描述

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

这里有一些你要知道的:

(1) 1900年1月1日是星期一.  
(2) 4,6,11和9月有30天.其他月份除了2月有31天.闰年2月有29天,平年2月有28天.  
(3) 年份可以被4整除的为闰年(1992=4*498 所以 1992年是闰年,但是1990年不是闰年)  
(4) 以上规则不适合于世纪年.可以被400整除的世纪年为闰年,否则为平年.所以,1700,1800,1900和2100年是平年,而2000年是闰年.  

请不要预先算好数据! 

输入描述

一个整数n.

输出描述

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

示例1

输入:

20

输出:

36 33 34 33 35 35 34

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(g++ 7.5.0) 解法, 执行用时: 3ms, 内存消耗: 408K, 提交时间: 2022-11-27 14:03:14

#include <bits/stdc++.h>
using namespace std;
int a[7];
int day[]={31,28,31,30,31,30,31,31,30,31,30,31};
int main(){
	int n,total=0;
	cin >> n;
	int d=0;
	for(int i=0;i<n;i++){
		int y=1900+i;
		for(int i=0;i<12;i++){
			a[(d+13)%7]++;
			d+=day[i];
			if(i==1&&(y%400==0||(y%4==0&&y%100!=0))){
                d+=1;
            }
		}
	}
	for(int i=0;i<7;i++) cout << a[(i+6)%7] << " ";
	return 0;
}

C++(clang++ 11.0.1) 解法, 执行用时: 2ms, 内存消耗: 408K, 提交时间: 2022-11-02 11:53:23

#include <iostream>
using namespace std;

int a[7];
int day[]={31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{
	int n,total=0;
	cin>>n;
	int d=0;
	for(int i=0;i<n;i++)
	{
		int y = 1900+i;
		for(int i=0;i<12;i++)
		{
			a[(d+13)%7]++;
			d += day[i];
			if(i==1&&(y%400==0||(y%4==0&&y%100!=0)))//闰年2月 
				d+=1;
		}
	}
	for(int i=0;i<7;i++)
		cout<<a[(i+6)%7]<<" ";
	cout<<endl;
	return 0;
}

Python3 解法, 执行用时: 49ms, 内存消耗: 4872K, 提交时间: 2022-07-06 13:41:46

import datetime

N = int(input())

L = [0] * 8

for i in range(1900, 1900 + N):
    for j in range(1, 13):
        a = datetime.date(i, j, 13)
        L[a.isocalendar()[2]] += 1

B = L[-2:] + L[1:-2]
print(" ".join(map(str, B)))

上一题