#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);
}


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


7會員
30內容數
正在一點一滴學習程式,相信知識量總有一天會匯聚成大海,目前專門研究前端中。
留言0
查看全部
發表第一個留言支持創作者!
傑米的沙龍 的其他內容
題目:建立一個傳回值乘以 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
本專欄將提供給您最新的市場資訊、產業研究、交易心法、精選公司介紹,以上內容並非個股分析,還請各位依據自身狀況作出交易決策。歡迎訂閱支持我,獲得相關內容,也祝您的投資之路順遂! 每年 $990 訂閱方案👉 https://reurl.cc/VNYVxZ 每月 $99 訂閱方案👉https://re
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
本專欄將提供給您最新的市場資訊、產業研究、交易心法、精選公司介紹,以上內容並非個股分析,還請各位依據自身狀況作出交易決策。歡迎訂閱支持我,獲得相關內容,也祝您的投資之路順遂! 每年 $990 訂閱方案👉 https://reurl.cc/VNYVxZ 每月 $99 訂閱方案👉https://re
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日
在我從小大到的人際關係中,界線一直是很大的問題。我還記得我的導師兼朋友說過個很經典的推論:當剛開始見面的人,如果有越周到的禮貌代表這個人在熟悉了之後,有更大的可能是個不斷亂踩線的白目。