題目連結
題意:
這題光理解題意就費了很一番功夫= =
以輸入測資來講
每組測資第一行 mon, down, loan, d
假設你有 down 元,用它加上貸款 loan 買了一部車
車子價值 down + loan
貸款 loan 分 mon 個月 0 利率償還
而車子會每年減值(depreciation)
接下來的 d 行測資是減值資訊
每行 tmp, val 表示第 tmp 個月車子價值會掉 val
也就是變成本來的 (1 - val)
每組測資都會有第 0 個月,表示一開始就會減值
沒提到的月份就跟前一個月一樣
計算哪個月開始,車子的價值會高過貸款 loan
解法:
在一個迴圈內,直到貸款還完的月份
個別計算每個月剩餘貸款與車子價值
貸款就每個月扣 loan / mon
車子價值則是每個月先讀 val
拿車子當前價值 *(1-val)
兩兩比較即可
輸出時只有一個月 month 不加 s,其他都要
程式(Java):
題意:
這題光理解題意就費了很一番功夫= =
以輸入測資來講
每組測資第一行 mon, down, loan, d
假設你有 down 元,用它加上貸款 loan 買了一部車
車子價值 down + loan
貸款 loan 分 mon 個月 0 利率償還
而車子會每年減值(depreciation)
接下來的 d 行測資是減值資訊
每行 tmp, val 表示第 tmp 個月車子價值會掉 val
也就是變成本來的 (1 - val)
每組測資都會有第 0 個月,表示一開始就會減值
沒提到的月份就跟前一個月一樣
計算哪個月開始,車子的價值會高過貸款 loan
解法:
在一個迴圈內,直到貸款還完的月份
個別計算每個月剩餘貸款與車子價值
貸款就每個月扣 loan / mon
車子價值則是每個月先讀 val
拿車子當前價值 *(1-val)
兩兩比較即可
輸出時只有一個月 month 不加 s,其他都要
程式(Java):
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.*; | |
public class Main { | |
public static void main(String args[]) { | |
Scanner sc = new Scanner(System.in); | |
while (sc.hasNext()) { | |
int mon = sc.nextInt(); | |
double down = sc.nextDouble(); | |
double loan = sc.nextDouble(); | |
int d = sc.nextInt(); | |
if (mon < 0) | |
break; | |
double dep[] = new double[101]; | |
for (int i = 0; i < d; i++) { | |
int tmp = sc.nextInt(); | |
dep[tmp] = sc.nextDouble(); | |
} | |
//car initial value | |
double car = down + loan; | |
//payment each month | |
double pay = loan / mon; | |
//depreciation rate | |
double rate = dep[0]; | |
int ans = 0; | |
for (; ans < mon; ans++) { | |
rate = ((dep[ans] > 0) ? dep[ans] : rate); | |
car *= (1 - rate); | |
if (car > loan) | |
break; | |
loan -= pay; //payment each month | |
} | |
if (ans == 1) | |
System.out.println("1 month"); | |
else | |
System.out.println(ans + " months"); | |
} | |
} | |
} |
留言
張貼留言