通过这两个题目练习了代码的熟练程度
发现了一个很好的网址:
http://www.nocow.cn/index.php/USACO_Training一个OIER做的wiki 里面有USACO题目的翻译和标程
了解到了
蔡勒公式 一个计算
星期的公式。
即随便给一个日期,就能用这个公式推算出是星期几。
蔡勒公式如下:
W = [C/4] - 2C + y + [y/4] + [13 * (M+1) / 5] + d - 1
详见:
http://baike.baidu.com/view/598757.htm附上两题的代码
1 /*
2 ID: hongtaozhy
3 LANG: C++
4 TASK: gift1
5 */
6 #include <stdio.h>
7 #include <string.h>
8 char name[10][15];
9 char temp[15],temp2[15];
10 int money[10];
11 int rec;
12 int key;
13 int main () {
14
15 freopen ("gift1.in", "r",stdin);
16 freopen ("gift1.out", "w",stdout);
17 int n ;
18 int i ;
19 scanf("%d",&n);
20
21 for( int i = 0 ; i < n ; i++ )
22 scanf("%s",name[i]);
23
24 while(scanf("%s",temp)!=EOF){
25 key = 0;
26 for( int i = 0 ; i < n ; i++ ){
27 if(!strcmp(name[i],temp)){
28 rec = i ;
29 break;
30 }
31 }
32 int nn;
33 int mon;
34
35
36 scanf("%d%d",&mon,&nn);
37 if( nn != 0 )
38 key = mon - ( mon / nn ) * nn ;
39 money[rec] -= mon ;
40 money[rec] += key ;
41
42 for( int i = 0 ; i < nn ; i++ ){
43
44 scanf("%s",temp2);
45 for( int j = 0 ; j < n ; j++ ){
46 if(!strcmp(name[j],temp2)){
47 rec = j ;
48 break;
49 }
50 }
51
52 money[rec] += mon / (nn) ;
53
54
55 }
56 }
57
58 for(int i = 0 ; i < n ; i++ ){
59 printf("%s %d\n",name[i],money[i]);
60 }
61
62
63 return 0;
64 }
65
1 /*
2 ID: hongtaozhy
3 LANG: C++
4 TASK: friday
5 */
6 #include <stdio.h>
7 int mon[12]={31,28,31,30,31,30,31,31,30,31,30,31};
8 int day[7];
9
10 int main () {
11 freopen ("friday.in", "r",stdin);
12 freopen ("friday.out", "w",stdout);
13
14 int i,j,l=6,n;
15 scanf("%d",&n);
16 n+=1900;
17 for(i=1900;i<n;i++){
18 if((i%100!=0 && i%4==0)||i%400==0)mon[1]++;
19 for(j=0;j<12;j++){
20 day[l]++;
21 l+=mon[j];
22 l%=7;
23 }
24 mon[1]=28;
25 }
26 printf("%d",day[6]);
27 for(i=0;i<6;i++)
28 printf(" %d",day[i]);
29 printf("\n");
30
31 return 0;
32 }
33