2011-03-10 101 views
2

我試圖解決問題,要求查找在每個工作日的第13天在1990 + N-1年期間發生多少次。無限循環,同時計算日期

int weekDay = 1; 
int week[] = {0,0,0,0,0,0,0}; 

N = 20; 

for (int year = 1990; year <= 1990+N-1; year++){ 
    for (int month = 1; month <= 12; month++){ 
     int days = numberOfDays(year,month); 

     for (int day = 1; day <= days; day++){ 
      if (day == 13) 
       week[weekDay] += 1; 

      weekDay += 1; 
      if (weekDay > 7) 
       weekDay = 1; 
     } 
    } 
} 

這是我的解決方案,但是我在一年中陷入了無限循環,似乎無法修復它。

編輯:numberOfDays函數。

int numberOfDays(int year, int month) 
{ 
    if (month == 2 && leapYear(year)) 
     return 29; 
    else if (month == 2) 
     return 28; 

    if (month == 9 || month == 4 || month == 6 || month == 11) 
     return 30; 

    return 31; 
} 
+1

哈哈,這是USACO – 2011-03-10 16:29:47

+1

你還可以發佈numberOfDays功能嗎?如果它改變年份或N,則可能是解釋。 – ajuc 2011-03-10 16:30:25

+0

@The GiG,它是。 – Marijus 2011-03-10 16:30:30

回答

5

您正在使用平日範圍1..7但你的直方圖陣列week[]被索引0..6。


一個可行的辦法 - 改變:

  week[weekDay] += 1; 

到:

  week[weekDay - 1] += 1; 

另一個解決方案 - 讓week[]一個元素更大,不使用元素0,即改變:

int week[] = {0,0,0,0,0,0,0}; 

到: - :

int weekDay = 1; 

到:

int weekDay = 0; 

int week[] = {0,0,0,0,0,0,0,0}; 

第三種可能的解決方案使用一週範圍0..6,即改變天

和更改:

 if (weekDay > 7) 
      weekDay = 1; 

到:

 if (weekDay > 6) 
      weekDay = 0; 

0

關接一個。您的week[]數組有7個元素,索引爲0..6。你寫信給week[7],它會覆蓋你不想要的東西,例如,變量爲year