==============票价矩阵==============
基础折扣:0.95
优惠折扣:0.6
单程票价:11.0
最低票价:2.0
====================================
刷卡:00 合计:40 金额:321.75 | ○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○
刷卡:01 合计:41 金额:319.80 | ●○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○
刷卡:02 合计:42 金额:317.85 | ●●○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○
刷卡:03 合计:43 金额:315.90 | ●●●○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○
刷卡:04 合计:44 金额:313.95 | ●●●●○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○
刷卡:05 合计:45 金额:312.00 | ●●●●●○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○
刷卡:06 合计:46 金额:310.05 | ●●●●●●○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○
刷卡:07 合计:47 金额:308.10 | ●●●●●●●○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○
刷卡:08 合计:48 金额:306.15 | ●●●●●●●●○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○
刷卡:09 合计:49 金额:304.20 | ●●●●●●●●●○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○
刷卡:10 合计:50 金额:302.25 | ●●●●●●●●●●○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○
刷卡:11 合计:51 金额:300.30 | ●●●●●●●●●●●○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○
刷卡:12 合计:52 金额:298.35 | ●●●●●●●●●●●●○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○
刷卡:13 合计:53 金额:296.40 | ●●●●●●●●●●●●●○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○
刷卡:14 合计:54 金额:294.45 | ●●●●●●●●●●●●●●○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○
刷卡:15 合计:55 金额:292.50 | ●●●●●●●●●●●●●●●○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○
====================================
实验次数:15
最高金额:321.75 次数:0
最低金额:292.50 次数:15
消费差额:29.25
每年差额:351.00
====================================
说明:普通羊城通卡:一个自然月内,持同一张羊城通卡乘坐公交和地铁次数累计15次后,从第16次开始乘坐公交或地铁均可享受票价6折优惠,每月累计次数不跨月计算。(羊城通刷卡9.5折优惠)
package com.shenhuanjie;
import java.text.DecimalFormat;
/**
* @description: 地铁票价矩阵
* @author: SHENHUANJIE
* @create: 2019-12-17 09:11
**/
public class CalDtPrice{
// 基础折扣
private static double DISCOUNT = 0.95;
// 优惠折扣
private static double PREFERENTIAL_DISCOUNT = 0.6;
// 单程票价
private static double CARFARE = 11;
// 最低票价
private static double BASIC_CARFARE = 2;
private static DecimalFormat decimalFormat = new DecimalFormat("#.00");
public static void main(String[] args) {
System.out.println("==============票价矩阵==============");
System.out.println("基础折扣:" + DISCOUNT);
System.out.println("优惠折扣:" + PREFERENTIAL_DISCOUNT);
System.out.println("单程票价:" + CARFARE);
System.out.println("最低票价:" + BASIC_CARFARE);
System.out.println("====================================");
// 最低消费次数
int lowestNum = 15;
// 最高消费
double maxprice = 0;
int maxNum = 0;
// 最低消费
double minprice = 0;
int minNum = 0;
for (int i = 0; i <= lowestNum; i++) {
double totalprice = calculate(i);
if (maxprice == 0 && minprice == 0) {
maxprice = minprice = totalprice;
} else {
if (totalprice >= maxprice) {
maxprice = totalprice;
maxNum = i;
}
if (totalprice <= minprice) {
minprice = totalprice;
minNum = i;
}
}
}
System.out.println("====================================");
System.out.println("实验次数:" + lowestNum);
System.out.println("最高金额:" + decimalFormat.format(maxprice) + "\t次数:" + maxNum);
System.out.println("最低金额:" + decimalFormat.format(minprice) + "\t次数:" + minNum);
System.out.println("消费差额:" + decimalFormat.format(maxprice - minprice));
System.out.println("每年差额:" + decimalFormat.format(12 * (maxprice - minprice)));
System.out.println("====================================");
System.out.println("说明:普通羊城通卡:一个自然月内,持同一张羊城通卡乘坐公交和地铁次数累计15次后,从第16次开始乘坐公交或地铁均可享受票价6折优惠,每月累计次数不跨月计算。(羊城通刷卡9.5折优惠)");
}
/**
* 计算最低消费
*
* @param lowestNum 最低消费次数
* @return 消费金额
*/
private static double calculate(int lowestNum) {
int priceNum = 0;
double totalPrice = 0;
// 通勤次数
int totalPriceNum = 40;
double discount = DISCOUNT;
for (int i = 1; i <= lowestNum; i++) {
if (priceNum >= 15) {
discount = PREFERENTIAL_DISCOUNT;
}
priceNum++;
double carfare = BASIC_CARFARE * discount;
totalPrice += carfare;
}
for (int i = 1; i <= totalPriceNum; i++) {
if (priceNum >= 15) {
discount = PREFERENTIAL_DISCOUNT;
}
priceNum++;
double carfare = CARFARE * discount;
totalPrice += carfare;
}
String lnum = String.format("%02d", (lowestNum));
String process = "";
for (int i = 0; i < lowestNum; i++) {
process += "●";
}
for (int i = 0; i < priceNum - lowestNum; i++) {
process += "○";
}
System.out.println("刷卡:" + lnum + "\t合计:" + priceNum + "\t金额:" + decimalFormat.format(totalPrice) + " | " + process);
return totalPrice;
}
}