USACO 又完成了1.1的两个简单题目

USACO 又完成了1.1的两个简单题目

通过这两个题目练习了代码的熟练程度
发现了一个很好的网址: 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 


你可能感兴趣的:(USACO 又完成了1.1的两个简单题目)