對起始年份和結束年份,可以對每一天單獨判斷;
對中間的每個整年,週末總的天數分為兩部分:
1. 每個整年恰有完整的52個周,所以至少有 2*52 天是週末;
2. 閏年時,366%7 = 2,需要判斷12-31和12-30是否為週末即可,平年需要判斷12-31是否為週末;
對中間的每個整年,都有11天假日,注意週末與假日重合的情況。
這道題麻煩之處在於星期的計算和週末與假日重合時的處理。
星期的計算公式:
1單獨對每個假日進行判斷,就避免了週末與假日重合時重複計算:int getweek(int y, int m, intd)2
int holidays[11][2] = , , , , , , , , , , };(列舉的做法會超時,不過需要對拍時很有用。)for (int j = 0; j < 11; ++j)
1 # include 2view code3int holidays[11][2] = , , , , , , , , , , };45
int getweek(int y, int m, intd)6
10bool isweekend(int y, int m, int
d)11
1516
const
int days = ;
17bool isleapyear(int year)
1819
void getdate(int &y, int &m, int &d)
2027
28bool isholiday(int m, int
d)29
33return
false;34
}3536bool isendofmonth(int y, int m, int
d)37
43return
false;44
}4546int cal(int year, int m, int d, int mm, int
dd)47
53if
(isendofmonth(year, i, j)) else58}
59return
cnt;60}
6162
void solve(void)63
else
else
87 ans -= 11;88
for (int j = 0; j < 11; ++j) 92}
93}9495 printf("
%d\n
", ans);96}
97}9899
intmain()
100
1008 二哥買期貨
二哥想知道在一段時期內,一共有多少個交易日。交易日的限定如下 週六 週日不能交易 元旦期間 1月1日 不能交易 五一勞動節期間 5月1日至3日 不能交易 十一國慶節期間 10月1日至7日 不能交易 沒有在上述要求中提到的日期均可交易 第一行有乙個整數n,表示一共有n組資料。每組資料都有一行,是兩個用...
交大oj 1008 二哥買期貨 C 總結
這個公式可以根據日期計算這一天是星期幾,具體公式如下 w d 2 m 3 m 1 5 y y 4 y 100 y 400 mod 7 這個函式返回的結果是0 6的整數,表示星期一到星期天 int getweeknumber int year,int month,int day return day ...
1037 二哥買草
二哥在網上買乾草。他發現了一筆特殊的買賣。他每買一捆大小為a 1 a 1,000,000 的乾草,他就能免費獲得一捆大小為b 1 b a 的乾草,也就是說免費的那個必須大小是小於購買的那個。然而,這筆交易是有規定的 大的一捆乾草必須是高質量的,小的一捆是低質量的。二哥是個吝嗇鬼,他並不在意 隨便什麼...