2013-12-11 35 views
0

什麼是計算無符號整數範圍中偶數數量的最簡單方法?在java中計算偶數範圍的最簡單方法是什麼

一個例子:如果範圍爲(0,4),那麼它應該返回3.

我有時間難以想到的任何簡單的方法。我提出的唯一解決方案涉及幾個if語句。是否有一行簡單的代碼可以在沒有if語句或三元運算符的情況下執行此操作。

public static int countEvens(int first, int last) 
{ 
     int count = 0; 
     for(int i = first; i <= last; i++) 
     count += i%2 == 0 ? 1 : 0; 
     return count; 

} 

這項工作?

回答

3

你需要

last/2 - (first + 1)/2 + 1 
+0

+1檢查所有奇數/偶數的第一個和最後一個組合。 – Matt

+0

它不適用於負數,但問題確定「無符號」。 –

+0

謝謝,只有正數。 – user3079090

1

如果您範圍內的數字數量是偶數,那麼您有n/2個偶數。

如果它是奇數,那麼如果first是奇數,則有n/2向下舍入,如果first是偶數,則n/2向上舍入。

+2

爲什麼downvote?請解釋,所以我可以從我的錯誤中學習:) – Blub

+0

在這個問題的情況下,範圍的大小是4,其中有3個偶數。 –

+0

否範圍的大小是5:0,1,2,3,4 – Blub

2

這裏有一個辦法:

埃文斯從0到的第一個數字的號碼是:

num_evens_first = (first/2 + 1) 

埃文斯從0到最後的數字編號爲:

num_evens_last = (last/2 + 1) 

如果第一個數字本身是偶數,則範圍內的均數將是這兩個數字加1之間的差值。乾脆把這個,你可以使用這個公式:

num_evens_last - num_evens_first + (first + 1)%2 

或者都在同一時間:

(last/2 + 1) - (first/2 + 1) + (first + 1)%2 

簡化:

last/2 - first/2 + (first + 1)%2 
相關問題