USACO/friday
Friday the Thirteenth 黑色星期五
描述
13号又是一个星期五。13号在星期五比在其他日子少吗?为了回答这个问题,写一个程序,要求计算每个月的十三号落在周一到周日的次数。给出N年的 一个周期,要求计算1900年1月1日至1900+N-1年12月31日中十三号落在周一到周日的次数,N为正整数且不大于400.
注意,开始今年是一千九百年,不是1990
这里有一些你要知道的:
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年是闰年.
请不要调用现成的函数
请不要预先算好数据(就是叫不准打表)!
格式
PROGRAM NAME: friday
INPUT FORMAT:
(friday.in)
一个正整数n.
OUTPUT FORMAT:
(friday.out)
七个在一行且相分开的整数,它们代表13日是星期六,星期日,星期一...星期五的次数..
SAMPLE INPUT
20
SAMPLE OUTPUT
36 33 34 33 35 35 34

1 #include <stdio.h> 2 int leap(int y)//判断闰年 3 { 4 if(y%4==0&&y%100!=0 || y%400==0) 5 { 6 return 1;//闰年 7 } 8 else return 0;//平年 9 } 10 int main() 11 { 12 int n; 13 int a[7]={0};//7,1~6 14 int b[12]={31,28,31,30,31,30,31,31,30,31,30,31}; 15 //分别表示平年的1月13日到2月13日要经历的天数,……,12月13日到1月13日经历的天数 16 17 int i,j; 18 int daySum=13%7; 19 int y=1900; 20 a[daySum]++;//1900年1月13日是星期六 21 22 freopen("friday.in","r",stdin); 23 freopen("friday.out","w",stdout);/**/ 24 scanf("%d",&n); 25 for(i=0;i<n;i++) 26 { 27 y=1900+i;//y表示下面要处理的年份 28 for(j=0;j<12;j++) 29 { 30 if(j==1&&leap(y)==1) 31 { 32 daySum=(daySum+b[j]+1)%7; 33 a[daySum]++; 34 } 35 else 36 { 37 daySum=(daySum+b[j])%7; 38 a[daySum]++; 39 } 40 } 41 } 42 a[daySum]--;//这个地方要剪掉一个1是因为上面的循环其实已经计算到了1900+n年的1月13日。但其实题目只要求到1900+n-1年12月31日为止。 43 printf("%d %d",a[6],a[0]);//先输出星期六、星期天 44 for(i=1;i<6;i++) 45 { 46 printf(" %d",a[i]); 47 } 48 printf("\n"); 49 return 0; 50 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App