2017年6月12日 星期一

CPE 014 UVa12019-A - Dooms Day Algorithm

題目原文
題目內容
請你判斷西元2011年的某月某日是星期幾。

輸入說明:
輸入的第一列有一個表示測試資料組數的整數。接著每一列分別表示一組測試資料,其格式為M D。M表示月份(1~12),D表示日期(1~31),所有日期皆是合法的。

輸出說明:
請你判斷2011年的該日期是星期幾。星期一到星期日分別為 Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday。

Sample Input

8
1 6
2 28
4 5
5 26
8 1
11 1
12 25
12 31

Sample Output


Thursday
Monday
Tuesday
Thursday
Monday
Tuesday
Sunday
Saturday

解法
可以藉由原文題目裡面提到的幾個日期來為基準,來以此推算接下來的日期並找其規律。


(以上資料來源:大學程式能力檢定Collegiate Programming Examination(CPE)、中文翻譯:Ruby兔的ACM園地)




程式碼解答




#include <stdio.h>

int main()
{
 const int daymonth[]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};///每個月有幾天
 const char*dayweek[]={"Friday", "Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday"};///一個星期有禮拜幾
 
 int _case, month, day, i, totalday;///變數先設好舊版C語言要先設好, 新版後可以在中間運算是可以中再設
 scanf("%d", &_case);//讀入幾筆資料
 while(_case--)///運算過程
 {
  scanf("%d%d", &month, &day);
  totalday=0;///先歸零以確保
  for(i=0; i< month; i++)
  {
   totalday+=daymonth[i];
  }
  totalday+=day;
  printf("%s\n", dayweek[totalday%7]);
 }
}

程式碼打包:解法一

沒有留言:

張貼留言