C++先使用if迴圈構建思路,再進行濃縮,我知道沒有直接把判別式帶進cout中好,但至少可以解題
濃縮完成後可以發現,%2恰好可以充當0,1之間的切換,而透過0,1我們可以決定哪些式子不會成立!!
((b-a+1)%2)*( (b%2)*((b-a)/2)+((b+1)%2)*((b-a)/2+1) ) + ((b-a)%2)*((b-a+1)/2)
前半段:
當(b-a)為偶數(=1),就會成立
並且
如果(b%2)成立,((b+1)%2)就會不成立,最終列印((b-a)/2)
反之則列印((b-a)/2+1)
後半段:
(b-a)為奇數,就會成立(=1)
並且
列印((b-a+1)/2)
最初是利用差值的結果去發想的
如果差值是奇數
舉例
1 4 差值3,有2個偶數
2 5 差值3,有2個偶數
答案會是(b-a+1)/2
如果差值是偶數
舉例
2 4 差值2,有2個奇數
1 3 差值2,有1個奇數 比 2 4 少1
就必須進一步檢查,a或b擇一(因為差值偶數就代表a,b同為奇數或者同為偶數)
這裡選擇a舉例
將a%2就能知道最後的答案是否會差1
進而選擇+1或不+1
Original if程式碼
/*
#include<iostream> using namespace std; int main(void){ unsigned long long a,b; cin>>a>>b; if((b-a)%2 == 0){ if(b%2 == 0){ cout<<(b-a)/2+1; }else{ cout<<(b-a)/2; } }else{ cout<<(b-a+1)/2; } return 0; }
*/