USACO/friday

简介: Friday the Thirteenth 黑色星期五 描述 13号又是一个星期五。13号在星期五比在其他日子少吗?为了回答这个问题,写一个程序,要求计算每个月的十三号落在周一到周日的次数。给出N年的 一个周期,要求计算1900年1月1日至1900+N-1年12月31日中十三号落在周一到周日的次数,N为正整数且不大于400.

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 }
View Code

 

相关文章
|
7月前
|
算法
[USACO 2007 Jan S]Protecting the Flowers
[USACO 2007 Jan S]Protecting the Flowers
|
7月前
|
算法 C语言 C++
Til the Cows Come Home (USACO 2004 November)(Dijkstra算法)
Til the Cows Come Home (USACO 2004 November)(Dijkstra算法)
23 0
洛谷P2871-[USACO07DEC]Charm Bracelet S(01背包模板题)
洛谷P2871-[USACO07DEC]Charm Bracelet S(01背包模板题)
洛谷P2871-[USACO07DEC]Charm Bracelet S(01背包模板题)
洛谷P6207-[USACO06OCT] Cows on Skates G(DFS记录路径)
洛谷P6207-[USACO06OCT] Cows on Skates G(DFS记录路径)
洛谷P3009-[USACO11JAN]Profits S(DP-最大子段和)
洛谷P3009-[USACO11JAN]Profits S(DP-最大子段和)
洛谷P3009-[USACO11JAN]Profits S(DP-最大子段和)
|
机器学习/深度学习
洛谷 P2742 [USACO5.1]圈奶牛Fencing the Cows
题目描述 农夫约翰想要建造一个围栏用来围住他的奶牛,可是他资金匮乏。他建造的围栏必须包括他的奶牛喜欢吃草的所有地点。对于给出的这些地点的坐标,计算最短的能够围住这些点的围栏的长度。 输入输出格式 输入格式:   输入数据的第一行包括一个整数 N。N(0
973 0
|
SDN
USACO/gift1
描述  对于一群(NP个)要互送礼物的朋友,GY要确定每个人送出的钱比收到的多多少。 在这一个问题中,每个人都准备了一些钱来送礼物,而这些钱将会被平均分给那些将收到他的礼物的人。 然而,在任何一群朋友中,有些人将送出较多的礼物(可能是因为有较多的朋友),有些人有准备了较多的钱。
1004 0
poj 2481 Cows
点击打开链接poj2481 思路:线段树+单点更新 分析: 1 题目给定n头牛所在的区间,然后问每头牛都有几头牛比它强壮 2 根据题目如果牛i的区间是[Si , Ei],牛j的区间是[Sj , Ej]那么牛i要比牛j强壮的话那么就有Si = Ej && Si-Ei != Sj-Ej; 3 那么根据上面的条件,我们应该要先对n头牛的区间排序”按照S从小到大,相同S按照E从大到小排序“,然后就可以利用线段树求了。
855 0