某学院有m个学生参加南湖春游,休息时喝汽水。南湖商家公告: (1)买1瓶汽水定价1.40元,喝1瓶汽水(瓶不带走)1元。 (2)为节约资源,规定3个空瓶可换回1瓶汽水,或20个空瓶可换回7瓶汽水。 (3)为方面顾客,可先借后还。例如借1瓶汽水,还3个空瓶;或借7瓶汽水,还20个空瓶。 问m个学生每人喝1瓶汽水(瓶不带走),至少需多少元? 输入正整数m(2<m<10000),输出至少需多少元(精确到小数点后第2位)编写java程序
时间: 2024-04-21 15:29:46 浏览: 132
以下是Java程序实现:
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int m = scanner.nextInt();
double totalCost = 0.0; // 总花费
int emptyBottles = 0; // 空瓶数
int borrowedBottles = 0; // 借来的瓶数
for (int i = 0; i < m; i++) {
// 喝1瓶汽水
totalCost += 1.0;
emptyBottles += 1;
// 满3个空瓶换1瓶汽水
if (emptyBottles >= 3) {
int exchangedBottles = emptyBottles / 3;
totalCost -= exchangedBottles * 1.4; // 先用空瓶买回来
emptyBottles = emptyBottles % 3 + exchangedBottles; // 更新空瓶数
}
// 借来的瓶子够还1瓶汽水了
if (borrowedBottles >= 1) {
borrowedBottles -= 1;
emptyBottles += 1;
}
// 满20个空瓶换7瓶汽水
if (emptyBottles >= 20) {
int exchangedBottles = emptyBottles / 20;
totalCost -= exchangedBottles * 6.3; // 先用空瓶买回来
emptyBottles = emptyBottles % 20 + exchangedBottles * 7; // 更新空瓶数
borrowedBottles += exchangedBottles; // 记录借来的瓶数
}
}
System.out.printf("%.2f", totalCost);
}
}
```
程序思路:
1. 循环m次,表示每个学生都喝了一瓶汽水。
2. 每喝一瓶汽水,总花费增加1元,空瓶数加1。
3. 如果空瓶数达到3个,则可以换回1瓶汽水。先用1.4元买回来,然后用新的空瓶继续换。
4. 如果有借来的瓶子,可以用来还1瓶汽水。每当喝1瓶汽水时,判断是否有借来的瓶子够还1瓶。
5. 如果空瓶数达到20个,则可以换回7瓶汽水。先用6.3元买回来,然后用新的空瓶继续换,并记录借来的瓶数。
6. 最后输出总花费,精确到小数点后第2位。
注:本题的答案与m的具体取值有关,无法使用定理或公式求解,需要模拟。
阅读全文