牛牛正在寄快递,他了解到快递在 1kg 以内的按起步价 20 元计算,超出部分按每 kg 1元计算,不足 1kg 部分按 1kg计算。如果加急的话要额外付五元,请问牛牛总共要支付多少快递费。
输入描述:
第一行输入一个单精度浮点数 a 和一个字符 b ,a 表示牛牛要寄的快递的重量,b表示牛牛是否选择加急,'y' 表示加急 ,'n' 表示不加急。
输出描述:
输出牛牛总共要支付的快递费用
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
double price = in.nextFloat();
String s = in.nextLine();
char cha = s.charAt(1);
double diff = Math.ceil(price - 1); //Math.ceil 向上取整 Math.floor 向下取整
if (price <= 1){
if (cha == 'n'){
price = 20;
} else if (cha == 'y') {
price = 25;
}
} else if (price > 1) {
if (cha == 'n'){
price = 20 + diff;
} else if (cha == 'y') {
price = 25 + diff;
}
}
System.out.printf("%.0f",price);
}
补充
数组中两个字符串的最小距离
package live.every.day.ProgrammingDesign.CodingInterviewGuide.String;
/**
* 数组中两个字符串的最小距离
*
* 【题目】
* 给定一个字符串数组strs,再给定两个字符串str1和str2,返回在strs中str1与str2的最小距离,如果str1或str2为null,或
* 不在strs中,返回-1。
*
* 【进阶题目】
* 如果查询发生的次数有很多,如何把每次查询的时间复杂度降为O(1)?
*
* 【难度】
* 中等
*
* 【解答】
* 原问题。
* 从左到右遍历strs,用变量last1记录最近一次出现的str1的位置,用变量last2记录最近一次出现的str2的位置。如果遍历到
* str1,那么i-last2的值就是当前的str1和左边离它最近的st2之间的距离。如果遍历到str2,那么i-last1的值就是当前的str2
* 和左边离它最近的str1之间的距离。用变量min记录这些距离的最小值即可。
* 请参看如下的minDistance方法。
*
* @author Created by LiveEveryDay
*/
public class TwoStringsMinDistanceInArray1 {
public static int minDistance1(String[] strs, String str1, String str2) {
if (str1 == null || str2 == null) {
return -1;
}
if (str1.equals(str2)) {
return 0;
}
int last1 = -1;
int last2 = -1;
int min = Integer.MAX_VALUE;
for (int i = 0; i != strs.length; i++) {
//排除初值
if (strs[i].equals(str1)) {
min = Math.min(min, last2 == -1 ? min : i - last2);
last1 = i;
}
if (strs[i].equals(str2)) {
min = Math.min(min, last1 == -1 ? min : i - last1);
last2 = i;
}
}
return min == Integer.MAX_VALUE ? -1 : min;
}
public static void main(String[] args) {
String[] strs = {"1", "3", "3", "3", "2", "3", "1"};
String str1 = "1";
String str2 = "2";
System.out.printf("The min distance is: %d", minDistance1(strs, str1, str2));
}
}
// ------ Output ------
/*
The min distance is: 2
*/