There is a sale in a supermarket, there will be a ​​discount​​ every ​​n​​ customer.

There are some products in the supermarket where the id of the ​​i-th​​ product is ​​products[i]​​ and the price per unit of this product is ​​prices[i]​​.

The system will count the number of customers and when the ​​n-th​​ customer arrive he/she will have a ​​discount​​ on the bill. (i.e if the cost is ​​x​​ the new cost is ​​x - (discount * x) / 100​​). Then the system will start counting customers again.

The customer orders a certain amount of each product where ​​product[i]​​ is the id of the ​​i-th​​ product the customer ordered and ​​amount[i]​​ is the number of units the customer ordered of that product.

Implement the ​​Cashier​​ class:

  • ​Cashier(int n, int discount, int[] products, int[] prices)​​ Initializes the object with ​​n​​, the ​​discount​​, the ​​products​​ and their ​​prices​​.
  • ​double getBill(int[] product, int[] amount)​​ returns the value of the bill and apply the discount if needed. Answers within ​​10^-5​​ of the actual value will be accepted as correct.

 

Example 1:

Input
["Cashier","getBill","getBill","getBill","getBill","getBill","getBill","getBill"]
[[3,50,[1,2,3,4,5,6,7],[100,200,300,400,300,200,100]],[[1,2],[1,2]],[[3,7],[10,10]],[[1,2,3,4,5,6,7],[1,1,1,1,1,1,1]],[[4],[10]],[[7,3],[10,10]],[[7,5,3,1,6,4,2],[10,10,10,9,9,9,7]],[[2,3,5],[5,3,2]]]
Output
[null,500.0,4000.0,800.0,4000.0,4000.0,7350.0,2500.0]
Explanation
Cashier cashier = new Cashier(3,50,[1,2,3,4,5,6,7],[100,200,300,400,300,200,100]);
cashier.getBill([1,2],[1,2]); // return 500.0, bill = 1 * 100 + 2 * 200 = 500.
cashier.getBill([3,7],[10,10]); // return 4000.0
cashier.getBill([1,2,3,4,5,6,7],[1,1,1,1,1,1,1]); // return 800.0, The bill was 1600.0 but as this is the third customer, he has a discount of 50% which means his bill is only 1600 - 1600 * (50 / 100) = 800.
cashier.getBill([4],[10]); // return 4000.0
cashier.getBill([7,3],[10,10]); // return 4000.0
cashier.getBill([7,5,3,1,6,4,2],[10,10,10,9,9,9,7]); // return 7350.0, Bill was 14700.0 but as the system counted three more customers, he will have a 50% discount and the bill becomes 7350.0
cashier.getBill([2,3,5],[5,3,2]); // return 2500.0


 

Constraints:

  • ​1 <= n <= 10^4​
  • ​0 <= discount <= 100​
  • ​1 <= products.length <= 200​
  • ​1 <= products[i] <= 200​
  • There are not repeated elements in the array ​​products​​.
  • ​prices.length == products.length​
  • ​1 <= prices[i] <= 1000​
  • ​1 <= product.length <= products.length​
  • ​product[i]​​ exists in ​​products​​.
  • ​amount.length == product.length​
  • ​1 <= amount[i] <= 1000​
  • At most ​​1000​​ calls will be made to ​​getBill​​.
  • Answers within ​​10^-5​​ of the actual value will be accepted as correct.

题目出这么长的leetcode实属人间之屑

题意是设计一个class,能初始化cashier和getbill,每n个人有一个可以获得discount



class Cashier {
public int mod = 0;
int n = 0;
double disc = 0;
private int[] products;
private int[] prices;
public Cashier(int n, int discount, int[] products, int[] prices) {
this.n = n;
disc = discount;
this.products = products;
this.prices = prices;
}

public double getBill(int[] product, int[] amount) {
mod ++;
double bill = 0;
for(int i = 0; i < product.length; i++){
for(int j = 0; j < products.length; j++){
if(products[j] == product[i]) bill += prices[j] * amount[i];
}

}
return mod % n == 0 ? (bill*(1 - disc / 100)) : bill;
}
}


方法一:一时大意忘了hashmap这个东西,就感觉怪怪的



class Cashier {
private int mod = 0;
private Map<Integer, Integer> map;
private double disc = 0;
private int n = 0;
public Cashier(int n, int discount, int[] products, int[] prices) {
this.n = n;
disc = discount;
this.map = new HashMap();
for(int i = 0; i < products.length; i++) map.put(products[i], prices[i]);
}

public double getBill(int[] product, int[] amount) {
mod ++;
double bill = 0;
for(int i = 0; i < product.length; i++){
bill += map.get(product[i]) * amount[i];
}
return mod % n == 0 ? (bill*(1 - disc / 100)) : bill;
}
}


用hashmap来记录products和prices