[USACO]黑色星期五
发布日期:2021-05-07 09:31:17 浏览次数:18 分类:精选文章

本文共 1155 字,大约阅读时间需要 3 分钟。

题目描述

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 天.
年份可以被 4 整除的为闰年(1992=4*498 所以 1992 年是闰年,但是 1990 年不是闰年)
以上规则不适合于世纪年.可以被 400 整除的世纪年为闰年,否则为平年.所以,1700,1800,1900 和 2100 年是平年,而 2000 年是闰年.
请不要预先算好数据!

输入

一个整数 n.

输出

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

样例输入

20

#include 
int judgeyear(int n);//计算一年多少天int main(){ int b[13]={0,31,60,91,121,152,182,213,244,274,305,335}; int a[13]={0,31,59,90,120,151,181,212,243,273,304,334};//只用存放11个月的天数,进行累加天数 int c[8]={0}; int n,i,j,k,sum=0,threeteen; scanf("%d",&n); for(i=1900;i<1900+n;i++) { if(judgeyear(i)==366) for(j=0;j<=11;j++) { threeteen=(13+b[j]+sum)%7;//这里的threeteen指的是算出来的星期1至7 c[threeteen]++; } else for(j=0;j<=11;j++) { threeteen=(13+a[j]+sum)%7; c[threeteen]++; } sum=sum+judgeyear(i); } printf("%d %d ",c[6],c[0]); for(k=1;k<=5;k++) { if(k<5) printf("%d ",c[k]); else printf("%d",c[k]); } }int judgeyear(int i){ if(i%400==0||(i%100!=0&&i%4==0)) return 366; else return 365;}
上一篇:css是什么
下一篇:1361: [NOIP]数制转换

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年03月28日 09时03分21秒