Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Kiểm tra có thể trả tiền thừa trong JavaScript

Vấn đề

Chúng ta cần viết một hàm JavaScript nhận vào một mảng số arr làm đối số duy nhất. Xét tình huống sau:

Một người bán hàng bán một mặt hàng giá đúng 5$. Một số khách hàng xếp hàng mua đúng 1 đơn vị mỗi người. Khách có thể đưa tiền 5$, 10$ hoặc 20$. Giả sử người bán ban đầu không có tiền và mảng đại diện cho tiền khách đưa theo thứ tự hàng đợi.

Hàm phải xác định xem người bán có thể trả tiền thừa chính xác cho tất cả khách hàng hay không.

Ví dụ, nếu đầu vào là:

Đầu vào

const arr = [5, 5, 10, 10, 20];

Đầu ra

const output = false;

Giải thích

Vì hai tờ 5$ sẽ dùng trả tiền cho hai tờ 10$, sau đó không thể trả tiền cho tờ 20$.

Ví dụ

Dưới đây là mã thực hiện:

const arr = [5, 5, 10, 10, 20];
const provideChanges = (arr = []) => {
  let fives = 0;
  let tens = 0;
  for (let i = 0; i < arr.length; i++) {
    switch (arr[i]) {
      case 5:
        fives += 1;
        break;
      case 10:
        if (fives <= 0) {
          return false;
        }
        fives -= 1;
        tens += 1;
        break;
      default:
        if (tens >= 1 && fives >= 1) {
          tens -= 1;
          fives -= 1;
        } else if (fives >= 3) {
          fives -= 3;
        } else {
          return false;
        }
        break;
    }
  }
  return true;
};
console.log(provideChanges(arr));

Kết quả

false