#3 Codewars - Money, Money, Money (7 kyu)

閱讀時間約 2 分鐘

題目

原始題目

Scrooge先生有一筆他想投資的錢 “P”。在他這樣做之前,他想知道 “P” 這個總和,必須將其保存在銀行中多少年,以使其達到所需的 “D” 金額。

該金額在每年支付利息“I”的銀行中保留 “Y” 年。在當年繳納 “T” 稅後,新款項被重新投資。

稅收注意事項:不是對投資本金徵稅,而是僅對當年的應計利息徵稅

因此,Scrooge先生必須等待 3 年才能將初始本金等於所需的金額。

您的任務是完成提供的方法並返回整個 “Y” 年數,以便 Scrooge 先生獲得所需的金額。

假設:假設期望的 “D” 主語始終大於初始主語。但是,最好考慮到,如果期望的 “D”等於“P”,則應該返回 0 年。

拆解流程

依據題意可整理出以下重點:

  1. 每年投資得到的錢為本金 * (1 + 利率) - 稅收
  2. 需要注意稅收是只對「利息」徵稅,因此稅收 = 本金 * (1 + 利率) - 本金 * 稅率
  3. 需要計算 N 年後,本金金額會大於期望金額:可使用 while 迴圈,如果本金小於期望金額,就繼續進行計算,大於就停止執行。

程式撰寫

function calculateYears(principal, interest, tax, desired) {
if (principal >= desired) {
//記得寫 return!!!
return 0;
}
let year = 0;
while (principal < desired) {
year++;
let taxMoney = principal * interest * tax;
principal = principal * (1 + interest) - taxMoney;
}
return year;
}

錯誤紀錄

中間犯了蠻多很瞎的錯誤...... 一開始寫完之後,發現實際測試都沒有通過,結果發現:

  1. if 判斷式忘記寫 return,沒有中斷函式執行
  2. while 迴圈裡面的條件式寫成 principal >= desired,難怪迴圈都不執行,因為一開始就是 false 了
  3. 利率的算法是 1 + 利率,否則本金會一直變少,不會變多

改善寫法

算法上可以更為精簡,像是這段是筆者寫的:

while (principal < desired) {
let taxMoney = principal * interest * tax;
principal = principal * (1 + interest) - taxMoney;
}

可以改寫如下:

while (principal < desired) {
principal += principal * interest * (1 - tax);
}


今天就介紹到這裡,如果大家有更好的寫法歡迎一起來討論哦~


avatar-img
7會員
30內容數
正在一點一滴學習程式,相信知識量總有一天會匯聚成大海,目前專門研究前端中。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
傑米的沙龍 的其他內容
題目:建立一個傳回值乘以 50 並增加 6 的函數。如果輸入的值是字串,則應傳回「Error」。
Codewars 是個程式練習網站,筆者主要練習的是 JavaScript,會記錄自己的解法,並參考其他人的寫法來改善自己的程式碼,那麼我們就開始吧!
本次的挑戰是「CSS Variables」,需要達成的目標是:「使用者操作拉桿或是選色器時,底下圖片的樣式會有對應的變化。」
本次的挑戰是「CSS + JS Clock」,需要達成的目標是:「時鐘的指針會轉動,指針都必須依據現實時鐘的規則前進。」這次需要搭配 CSS 動畫,製作時鐘的指針旋轉效果。
這系列文章會記錄 JS 30 當次挑戰時使用到的語法和相關知識。JS 30 官方有提供所有製作網頁的資源,不需要任何事前準備,就能無痛開始撰寫 JS,寫完之後還有 JS 30 作者提供的解答,不知道怎麼下手時可以參考、寫完之後也能了解更多解法,改善自己的寫法。
這篇主要會透過 CDN 引入 Material Icons,並補足官方文件裡只有提到 Filled 類別的引用方式,但沒有提到其他類別,像是 Outlined、Rounded、Sharp、Two tone,另外還會提到如何透過偽元素加入 Material Icons,現在我們就來看看如何引入吧!
題目:建立一個傳回值乘以 50 並增加 6 的函數。如果輸入的值是字串,則應傳回「Error」。
Codewars 是個程式練習網站,筆者主要練習的是 JavaScript,會記錄自己的解法,並參考其他人的寫法來改善自己的程式碼,那麼我們就開始吧!
本次的挑戰是「CSS Variables」,需要達成的目標是:「使用者操作拉桿或是選色器時,底下圖片的樣式會有對應的變化。」
本次的挑戰是「CSS + JS Clock」,需要達成的目標是:「時鐘的指針會轉動,指針都必須依據現實時鐘的規則前進。」這次需要搭配 CSS 動畫,製作時鐘的指針旋轉效果。
這系列文章會記錄 JS 30 當次挑戰時使用到的語法和相關知識。JS 30 官方有提供所有製作網頁的資源,不需要任何事前準備,就能無痛開始撰寫 JS,寫完之後還有 JS 30 作者提供的解答,不知道怎麼下手時可以參考、寫完之後也能了解更多解法,改善自己的寫法。
這篇主要會透過 CDN 引入 Material Icons,並補足官方文件裡只有提到 Filled 類別的引用方式,但沒有提到其他類別,像是 Outlined、Rounded、Sharp、Two tone,另外還會提到如何透過偽元素加入 Material Icons,現在我們就來看看如何引入吧!
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
初次來韓國,想當然爾的要來個韓服體驗,我並沒有事先預約,因為景福宮附近就有許多店,稍微逛了一下後發現款式大多分為3個等級:傳統,中間款(傳統+流行),流行款。租借時間也多分為3個級距:2小時、3小時、全日租。
Thumbnail
在前面的章節,我們提到低波動是質押成功的關鍵,那如果顛倒過來,使用高波動標的就不能質押嗎?當然也不能這樣講,只是說維持率的部分就必須將安全的數值拉高一點,因此資金利用率會低一些。使用00631L元大台灣50正2質押會有什麼問題?     常見質押標的選擇   年化波動度要較低一些,
Thumbnail
題目:你將會得到一個單詞,你的任務是返回該單詞的中間字符。如果單詞的長度是奇數,則返回中間字符。如果單詞的長度是偶數,則返回中間的兩個字符。
Thumbnail
題目:你的團隊正在開發一個新的高級文本編輯器,你的任務是實現行號功能。請編寫一個函數,該函數接受一個字符串列表作為輸入,並返回每行字符串前面附帶正確的行號。行號從 1 開始計數。格式為 n: 字符串。請注意冒號和空格之間的間隔。
Thumbnail
劇情: 棋局: 本局的第95手3一金打是關鍵,此時先手的勝率從+4降到-8.9,但是此時已經過後手一連串的進攻無果,以及先手的猛烈進攻中,後手的心態很難突破只能防守的障礙,導致發現還有7九角時,已經錯過了進攻時機,而輸了這盤棋。 棋譜:
Thumbnail
而此時剛好是眾人皆醒,我獨"醉"的狀態,因為我已經睡死了,幸好耳塞有戴好戴滿,所以什麼都沒聽到。 天亮一早當我在刷牙時, 「你知道昨晚發生的事嗎? 」旁邊同樣在刷牙的一位朝聖者女士問我。 「發生什麼事?」我問。 「你真的沒聽到嗎? 所有人都驚醒了!」她表情露出非常不可思議的神情,眼睛張大大的。
Thumbnail
Juliet: 早上起床第一件事,不是洗臉刷牙,而是至樓下看信箱。沒有你的來信,只有一個空洞的失望。 你現在生活得如何?我很擔心,也很想知道。 昨夜有夢,醒來夢仍清清楚楚。我夢見自己平躺在堅冷的石板上,死了,但你來,給我深深一吻,便把生命吐入嘴中,我復活了。 喬 1977年8月5日
在我從小大到的人際關係中,界線一直是很大的問題。我還記得我的導師兼朋友說過個很經典的推論:當剛開始見面的人,如果有越周到的禮貌代表這個人在熟悉了之後,有更大的可能是個不斷亂踩線的白目。
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
初次來韓國,想當然爾的要來個韓服體驗,我並沒有事先預約,因為景福宮附近就有許多店,稍微逛了一下後發現款式大多分為3個等級:傳統,中間款(傳統+流行),流行款。租借時間也多分為3個級距:2小時、3小時、全日租。
Thumbnail
在前面的章節,我們提到低波動是質押成功的關鍵,那如果顛倒過來,使用高波動標的就不能質押嗎?當然也不能這樣講,只是說維持率的部分就必須將安全的數值拉高一點,因此資金利用率會低一些。使用00631L元大台灣50正2質押會有什麼問題?     常見質押標的選擇   年化波動度要較低一些,
Thumbnail
題目:你將會得到一個單詞,你的任務是返回該單詞的中間字符。如果單詞的長度是奇數,則返回中間字符。如果單詞的長度是偶數,則返回中間的兩個字符。
Thumbnail
題目:你的團隊正在開發一個新的高級文本編輯器,你的任務是實現行號功能。請編寫一個函數,該函數接受一個字符串列表作為輸入,並返回每行字符串前面附帶正確的行號。行號從 1 開始計數。格式為 n: 字符串。請注意冒號和空格之間的間隔。
Thumbnail
劇情: 棋局: 本局的第95手3一金打是關鍵,此時先手的勝率從+4降到-8.9,但是此時已經過後手一連串的進攻無果,以及先手的猛烈進攻中,後手的心態很難突破只能防守的障礙,導致發現還有7九角時,已經錯過了進攻時機,而輸了這盤棋。 棋譜:
Thumbnail
而此時剛好是眾人皆醒,我獨"醉"的狀態,因為我已經睡死了,幸好耳塞有戴好戴滿,所以什麼都沒聽到。 天亮一早當我在刷牙時, 「你知道昨晚發生的事嗎? 」旁邊同樣在刷牙的一位朝聖者女士問我。 「發生什麼事?」我問。 「你真的沒聽到嗎? 所有人都驚醒了!」她表情露出非常不可思議的神情,眼睛張大大的。
Thumbnail
Juliet: 早上起床第一件事,不是洗臉刷牙,而是至樓下看信箱。沒有你的來信,只有一個空洞的失望。 你現在生活得如何?我很擔心,也很想知道。 昨夜有夢,醒來夢仍清清楚楚。我夢見自己平躺在堅冷的石板上,死了,但你來,給我深深一吻,便把生命吐入嘴中,我復活了。 喬 1977年8月5日
在我從小大到的人際關係中,界線一直是很大的問題。我還記得我的導師兼朋友說過個很經典的推論:當剛開始見面的人,如果有越周到的禮貌代表這個人在熟悉了之後,有更大的可能是個不斷亂踩線的白目。