---
tags: Cmoney_Java題目
---
Java_Cmoney_ft7107
===


1.需要的 function
---
1.1 方法一 遞迴+小數無條件進位
---
1. 使用遞迴回傳來計算不同小時可以騎幾公里,然後加在一起
2. 總距離/一天可以騎幾公里 = 要花幾天(有小數點)
3. `(int) Math.ceil(要花幾天(float))`,無條件進位,再轉成 int
```java=
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int K = sc.nextInt();
int M = sc.nextInt();
int sum = 0;
for (int i = 1; i <= K; i++) {
sum += F(N, i);
}
float re = (float) M / sum;
System.out.println((int) Math.ceil(re));
}
public static int F(int N, int K) {
if (K == 1)
return N;
else
return F(N, K - 1) * 90 / 100;
}
}
```
1.2 方法二 純迴圈
---
1. 原本遞迴的地方,改成用迴圈
2. 特別注意,不同小時騎幾公里、一天騎幾公里、總共要騎幾公里,
三個變數要分開
3. 最後一個while迴圈,是代替用除的算要騎幾天
```java=
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int K = sc.nextInt();
int M = sc.nextInt();
int dayRide = N;
int sum = 0;
for (int i = 0; i < K - 1; i++) {
N = N * 90 / 100;
dayRide += N;
}
int count = 0;
while (sum <= M) {
sum += dayRide;
count++;
}
System.out.println(count);
}
}
```
1.3 方法三 遞迴+迴圈
---
1. 改良第一版遞迴,可以計算一天可以騎多少公里
2. 使用迴圈計算何時會超過目標距離
```java=
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
int m = sc.nextInt();
int d = 0;
int ride = 0;
while (ride <= m) {
ride += ride(n, k);
d++;
}
System.out.println(d);
}
public static int ride(int n, int k) {
if (k == 1)
return n;
return ride(n, k - 1) + n - n * 10 / 100 * (k - 1);
}
}
```