隨機從罐中選擇兩粒豆子。如果他們的顏色相同,就將它們都扔掉,並且在罐中放入一粒額外的黑豆。如果他們的顏色既有白色也有黑色,則將白豆返回罐中,同時扔掉黑豆。我們可以很容易的證明最後罐中會剩下一粒豆子,因為每次我們都會從罐中取走一粒種子。仔細觀察,我們發現,每次操作相當於兩種操作:1、取出兩粒白豆 2、取出一粒白豆。由此可見,當白豆原有奇數時,最後剩下的就是白豆。偶數的話,剩下的就是黑豆。
寫了乙個模擬程式,給定豆子數以及白色豆子的個數,隨機取豆操作,直至剩下最後一粒豆子:
void whiteblack(int coffee)
cout<<"ok"<}
takingone()和 putinginone()是隨機選取豆子和放入豆子。onlyone()則是判斷當前咖啡罐是否只剩下乙個豆子。
本章就到此結束,主要是對程式進行驗證,寫斷言好像哈不太習慣,不過assert對程式的理解和維護都很重要的,自己都是些注釋比較習慣。此外,花了大概乙個小時寫了乙個二分查詢程式,還好,程式沒錯,就是不夠優美,把最後一次比較提取出判斷了,導致程式**重複,多寫了5~6行冗餘**。對邊界的把握還有待提高。
程式設計珠璣第四章
正文裡面涉及到程式設計方法學的內容。不再細述 1 加及條件是0 l u n 1 2 這個函式可以寫成如下形式 int bs int a,int begin,int end,int v if e a end e v return e a return 1 再給一段測試 include include ...
程式設計珠璣 第四章 編寫正確的程式
1 對下標限定界限 加條件 0 l u n 1 2 這個函式可以寫成如下形式 include using namespace std int bs int a,int begin,int end,int v if e a end e v return e a return 1 int main co...
程式設計珠璣 第四章 編寫正確的程式
1 對下標限定界限 加條件 0 l u n 1 2 這個函式可以寫成如下形式 include using namespace std int bs int a,int begin,int end,int v if e a end e v return e a return 1 int main co...