d485: 我愛偶數
內容
文文很喜歡偶數,他甚至有收集偶數的習慣。你給他一個範圍的連續整數,他就會把其中的偶數留下來收藏。如今他又拿到了一個範圍的整數,請問他這次收藏了幾個偶數?對文文來說,0 也算是一個偶數哦!
輸入
輸入只有一行,其中含有兩個由空白隔開的整數 a, b (0 ≤ a ≤ b ≤ 2147483647)。
1 4
輸出
輸出一個整數,代表 a 與 b 之間 (含 a 與 b) 一共有多少個偶數。
2
提示
你可以只用算術運算子,而不用 if 指令來完成這題嗎?
解題思路
- 先不考慮首末兩項,中間項目總數 = (max - min) + 1
- 而如果末項為奇數,那 ((max - 1) - min) + 1 和 (max - min) + 1 的總偶數項不會變,同理套用到首項。
- 偶數的出現頻率為每兩項出現一次,所以假設首末兩項皆為偶數,那偶數出現的總次數 = Floor((max - min) / 2) + 1,
- 任何整數和位元 AND('&')做運算,若該數為偶數則值恆為 0 ,反之則為 1 。
運用上面的想法,整理出公式
偶數次數 = (max - (max & 1) - (min + (min & 1))) / 2 + 1
= (max - min - (max & 1) - (min & 1)) / 2 + 1
將輸入套入公式輸出即可。
完整程式碼
AC (2ms, 104KB)
|