題目連結:
題目大意:
給定三正整數 S 、 E 、 A (10 ≦ S 、 E ≦ 100,1 ≦ A ≦ 10),依序代表花一開始高度為 S 單位、顧客的期望高度為 E 單位、顧客的耐性值為 A。
花店老闆每天都會澆花,且每三天他會使用神奇肥料。但是他每開店八天就會關店休息兩天之後再繼續開店,那兩天既不會澆花也不會施肥。
而顧客會在老闆休息完後回來繼續開店去店裡觀望花的高度。如果目前花的高度沒有達到至少 E 單位高,則顧客的耐性會減一。一旦顧客耐性值歸零後,顧客便會取消訂單,花就賣不出去。
而花的高度之成長公式如下:
若前一天有使用神奇肥料,則今天的高度會增加「前一天之高度除以 3 取商數」之單位高;
如果只是單純澆水,則今天的高度會增加「前一天之高度除以 10 取商數」之單位高。
試問花朵在第幾天時會達到顧客之要求最低高度?如果顧客取消了訂單,使得花賣不出去,輸出「unsalable」;反之,則輸出所求的天數。
下圖為 S = 10 且讓花成長到第 12 天之過程:
範例輸入:
範例輸入 #1
10 10 1
範例輸入 #2
10 24 10
範例輸入 #3
10 28 2
範例輸入 #4
10 50 1
範例輸出:
範例輸出 #1
1
範例輸出 #2
7
範例輸出 #3
9
範例輸出 #4
unsalable
解題思維:
從第 1 天開始,對於每天先判斷花的高度是否小於目標高度且顧客耐性值 > 0 。不符合的話就跳離此迴圈。符合的話,則:
先判斷今天顧客會不會來光顧,如果會則將耐性值減去 1 (不用去判斷花的高度,因為上面已經判過了);再來,判斷前一天是否休息。有休息則不更新花的高度。沒有休息才根據有無使用神奇肥料去更新花的高度。
跳出以上迴圈後,此時判斷花的高度有沒有 ≧ 顧客所需高度。如果有就輸出上面的迴圈停在第幾天,該天數即是所求;反之,代表顧客放棄了這筆買賣,因此輸出「unsalable」。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。