fork(24) download
  1. /*
  2. 寫一個程式計算給定日期為星期幾。輸入會先告訴程式某年的 1 月 1 號為星期幾,例如範例中 2012 年的 1 月 1 號為星期日。接著程式會收到一些日期,並要計算出給定日期為星期幾,例如範例中程式將會收到 11 月 13 號,並計算出該日期為星期二。
  3. */
  4.  
  5. #include <stdio.h>
  6.  
  7. int main ()
  8. {
  9. int y, d;
  10. int n;
  11. int month, day;
  12. int leap_year;
  13. int days;
  14.  
  15. scanf ( "%d%d", &y, &d );
  16. scanf ( "%d", &n );
  17.  
  18. // leap year or not
  19. leap_year = y % 400 == 0 || ( y % 100 && y % 4 == 0 );
  20.  
  21. // calculate each input line
  22. for ( int i = 0; i < n; i++ ) {
  23. if ( i ) printf ( " " );
  24.  
  25. days = d;
  26. scanf ( "%d%d", &month, &day );
  27.  
  28. if ( month < 1 || month > 12 ) {
  29. printf ( "-1" );
  30. continue;
  31. }
  32. if ( day < 1 ) {
  33. printf ( "-2" );
  34. continue;
  35. }
  36. else {
  37. switch ( month ) {
  38. case 2:
  39. if ( ( leap_year && day > 29 ) ||
  40. ( !leap_year && day > 28 ) ) {
  41. printf ( "-2" );
  42. continue;
  43. }
  44. break;
  45. case 4: case 6: case 9: case 11:
  46. if ( day > 30 ) {
  47. printf ( "-2" );
  48. continue;
  49. }
  50. break;
  51. default:
  52. if ( day > 31 ) {
  53. printf ( "-2" );
  54. continue;
  55. }
  56. }
  57. }
  58.  
  59. for ( int m = 1; m < month; m++ ) {
  60. switch ( m ) {
  61. case 2:
  62. if ( leap_year ) days += 29;
  63. else days += 28;
  64. break;
  65. case 4: case 6: case 9: case 11:
  66. days += 30;
  67. break;
  68. default:
  69. days += 31;
  70. }
  71. }
  72.  
  73. days += ( day - 1 );
  74. printf ( "%d", days % 7 );
  75. }
  76.  
  77. return 0;
  78. }
Success #stdin #stdout 0s 2160KB
stdin
Standard input is empty
stdout
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1