fork download
  1. /* 寫一個程式計算給定日期為星期幾。輸入會先告訴程式某年的 1 月 1 號為星期幾,例如範例中 2012 年的 1 月 1 號為星期日。接著程式會收到一些日期,並要計算出給定日期為星期幾,例如範例中程式將會收到 11 月 13 號,並計算出該日期為星期二。
  2.  
  3. (閏年計算請參考wiki)
  4.  
  5. 輸入格式
  6. 第一行包含一個西元年以及該年的一月一日為星期幾,如範例中 2012 0。注意,0 代表星期日,1 代表星期一,以此類推。第二行會告訴程式接下來將有 n 組日期需要計算。n 的範圍為 1 至 10。接下來的 n 行,每一行將會有一組需要計算的日期(月、日),如範例中的 11 月 13 號。若輸入的「月」有誤請輸出 -1;若輸入的「日」有誤請輸出 -2。
  7.  
  8. 輸出格式
  9. 共會輸出 n 個數字。我們用 0 代表星期日,1 代表星期一,以此類推。若輸入的「月」有誤請輸出 -1;若輸入的 「月」無誤但「日」有誤請輸出 -2。(數字間留一個空白)
  10. */
  11.  
  12. #include <stdio.h>
  13.  
  14. int main(void) {
  15. int years, weekday;
  16. int mon[10], day[10];
  17. int i,j ; /*counter*/
  18. int ww ; /*which weekdays is*/
  19. int yd = 0 ; /*total accumlator*/
  20. int n = 0;
  21. int b = 0;
  22. int a[12] = {31,28,31,30,31,30,31,31,30,31,30,31} ;
  23. scanf("%d", &years);
  24. scanf("%d", &weekday);
  25. scanf("%d", &n);
  26.  
  27. for (i=0 ; i<n ; i++ )
  28. {
  29. scanf("%d", &mon[i]);
  30. scanf("%d", &day[i]);
  31. }
  32. //判斷閏年 更改陣列值
  33. if (years % 400 == 0)
  34. a[1]= 29 ;
  35. else if ( (years%4 == 0) && (years%100 != 0) )
  36. a[1]= 29 ;
  37. else
  38. a[1]= 28 ;
  39.  
  40.  
  41. for (i=0 ; i<n ; i++) {
  42.  
  43. if (mon[i]>12 ||mon[i] < 1)
  44. ww= -1;
  45. else
  46. {
  47. for (j=0 ; j<(mon[i]-1) ; j++)
  48. yd = yd + a[j];
  49. ww = ( ((yd + day[i])-1)%7 + weekday) % 7;
  50. yd = 0;
  51. //prevent day wrong
  52. b = mon[i] - 1 ;
  53. if (day[i] > a[b] || day[i] < 1)
  54. ww = -2;
  55. }
  56. printf("%d ", ww);
  57.  
  58. }
  59. return 0;
  60. }
  61.  
Success #stdin #stdout 0s 4508KB
stdin
2552 6
6
15 20
8 30
2 29
11 31
0 13
9 19
stdout
-1 3 2 -2 -1 2