最優解
今天到小七超商買個咖啡, 小七店員媽媽就很開心的跟我說:「鐘先生今天咖啡 3 杯打七五折喔!如果滿 800 還可以打八折然後再送一組衛生紙, 活動很優惠喔!快點來幫我做業績 😸😸😸」, 這家離我家很近, 三不五時就就來買些有的沒有的, 這位店員媽媽也是很熟, 心裡盤算一下...我也常喝咖啡, 現在有優惠有可以幫人家做業績, 沒道理不做啊! 但是要底怎樣買才是最優解勒
動機
今天到小七超商買個咖啡, 小七店員媽媽就很開心的跟我說:「鐘先生今天咖啡 3 杯打七五折喔!如果滿 800 還可以打八折然後再送一組衛生紙, 活動很優惠喔!快點來幫我做業績 😸😸😸」, 這家離我家很近, 三不五時就就來買些有的沒有的, 這位店員媽媽也是很熟, 心裡盤算一下…我也常喝咖啡, 現在有優惠有可以幫人家做業績, 沒道理不做啊! 但是要底怎樣買才是最優解勒…
列出重點
首先, 先把剛剛的的對話抓出重點
- 濃粹拿鐵 60 元, 特大拿鐵 70 元, 相同 3 杯為一組, 打 7 折
- 打折後的咖啡, 超過 800 可以再打 8.5 折, 還送一袋衛生紙
那我要怎樣才能花最少錢最優解了
- 排列組合,找出超出 800 塊但是最接近 800 塊的解
其實有國中數學的基礎, 腦袋中應該可以很快的把公式列出來了
( 60 * 3 * 0.7 * x ) + ( 70 * 3 * 0.7 * y ) > 800
開算
這應該是國中數學題,但都還給老師了 🐤🐤🐤🐤🐤 , 所以…
let limitationPrice = 800;
const resultArr: string[] = [];
let xResult = 0;
let yResult = 0;
let x = 0;
do {
xResult = 3 * 60 * 0.7 * x;
let y = 0;
do {
yResult = 3 * 70 * 0.7 * y;
const result = xResult + yResult;
if (limitationPrice - result < 0) {
resultArr.push(
`濃粹拿鐵(x): ${x} 組, 特大拿鐵(y): ${y} 組, 共多少錢(price): ${result} 元`
);
break;
}
y += 1;
} while (yResult < limitationPrice);
x += 1;
} while (xResult < limitationPrice);
console.log(resultArr);
最後
上面這段程式, 大約不到 10 分鐘就寫完了, 應該不是效能最優的寫法, 但是應該很好懂才是, 我是想用數學來解, 不過我已經忘了 xy 二元運算是怎處裡, 所以只好寫 code 開盧, 畢竟這是我最會的東西 💯💯💯
生活中一堆東西需要我們去決策的, 可以是關於財務自由的投資理財, 也可以是芝麻小事買咖啡這種, 你是怎麼決策的? 是管他的閉著眼睛就衝下去就對了, 還是凡事都 google 一下先查了再說, 不管是哪種, 我身邊好像都有, 而且活得好像也沒有比較不好, 或是不好我也不知道 😃😃😃 , 那各位是怎麼解決自己生活中無法一時一刻就在腦袋馬上可以有答案的問題呢? 分享給我吧!!!