1008 二哥買期貨

2022-01-17 10:20:59 字數 1393 閱讀 8909

對起始年份和結束年份,可以對每一天單獨判斷;

對中間的每個整年,週末總的天數分為兩部分:

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 2

3int 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

view code

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 的乾草,也就是說免費的那個必須大小是小於購買的那個。然而,這筆交易是有規定的 大的一捆乾草必須是高質量的,小的一捆是低質量的。二哥是個吝嗇鬼,他並不在意 隨便什麼...