Codility CountDiv Exercise:不明白Codility CountDiv解決方案如何正確
給定一個範圍A..B和K值,返回的範圍內,通過K.
的例子是整除值的數量定爲A = 6,B = 11和K = 2。在範圍6至11,由2是6,8和10整除數,所以答案是3必須爲O所需的溶液(1) - 因此需要一個簡單的計算。
可以假定A和B是在範圍0..2,000,000,000,K是1..2,000,000,000和0 < = A < = B.
接受的解決方案,即分數100%作爲如下:
int solution(int A, int B, int K)
{
int inclusive = ((A%K)==0) ? 1 : 0;
return (B/K) - (A/K) + inclusive;
}
當我測試這個解決方案的輸入A = 0,B = 0和K = 1時,結果是1?我會認爲在0到0的範圍內,可以被1整除的值的數量是...... 0!
我認爲這是一個錯誤,該+1 A的包容性價值才應該設置如果A是非零。
因此,我提出了以下溶液(試驗A是非零):
int solution(int A, int B, int K)
{
int inclusive = (A && (A%K)==0) ? 1 : 0;
return (B/K) - (A/K) + inclusive;
}
但這僅得到62%(50%的正確性和75%的性能)。一些的測試情況下,失敗的是:
- A = 0,B = 1,K = 11 - 得到0,預期1
- A = 0,B = MAXINT,K在{1,MAXINT} ,得到了20億,預計2000000001
有人能解釋一下嗎?