0

PHP Cơ Bản - Cây rút Tiền ATM sử dụng foreach

Client Và Server Liên Lạc Với Nhau Như Thế Nào

Giao Thức HTTP

Http (HyperText Transfer Protocol) là giao thức truyền tải siêu văn bản được sử dụng trong www dùng để truyền tải dữ liệu giữa Web server đến các trình duyệt Web và ngược lại. Giao thức này sử dụng cổng 80 (port 80) là chủ yếu. Ví dụ: Một máy khách (trình duyệt) gửi một yêu cầu HTTP đến máy chủ; sau đó máy chủ trả về một phản hồi cho máy khách. Phản hồi chứa thông tin trạng thái về yêu cầu và cũng có thể chứa nội dung được yêu cầu. Có hai phương thức HTTP phổ biến nhất là: GET và POST

  • GET được sử dụng để yêu cầu dữ liệu từ một tài nguyên cụ thể.
  • POST được sử dụng để gửi dữ liệu đến máy chủ để tạo hoặc cập nhật tài nguyên.

Một số lưu ý khác về yêu cầu GET:

  • Yêu cầu GET có thể được lưu vào bộ nhớ đệm
  • Yêu cầu GET vẫn còn trong lịch sử trình duyệt
  • Yêu cầu GET có thể được đánh dấu
  • Yêu cầu GET không bao giờ được sử dụng khi xử lý dữ liệu nhạy cảm
  • Yêu cầu GET có giới hạn độ dài
  • Yêu cầu GET chỉ được sử dụng để yêu cầu dữ liệu (không sửa đổi)

Một số lưu ý khác về yêu cầu POST:

  • Yêu cầu POST không bao giờ được lưu vào bộ nhớ đệm
  • Yêu cầu ĐĂNG không còn trong lịch sử trình duyệt
  • Yêu cầu POST không thể được đánh dấu
  • Yêu cầu POST không có giới hạn về độ dài dữ liệu

Cây Rút Tiền ATM

  1. Bài toán trả tiền của máy rút tiền tự động ATM.

Trong máy rút tiền tự động ATM, ngân hàng đã chuẩn bị sẵn các loại tiền có mệnh giá 100.000 đồng, 50.000 đồng, 20.000 đồng và 10.000 đồng. Giả sử mỗi loại tiền đều có số lượng không hạn chế. Khi có một khách hàng cần rút một số tiền n đồng (tính chẵn đến 10.000 đồng, tức là n chia hết cho 10.000). Hãy tìm một phương án trả tiền sao cho trả đủ n đồng và số tờ giấy bạc phải trả là ít nhất.

Giải:

Gọi X = (X1, X2, X3, X4) là một phương án trả tiền, trong đó X1 là số tờ giấy bạc mệnh giá 100.000 đồng, X2 là số tờ giấy bạc mệnh giá 50.000 đồng, X3 là số tờ giấy bạc mệnh giá 20.000 đồng và X4 là số tờ giấy bạc mệnh giá 10.000 đồng.

Theo yêu cầu ta phải có X1 + X2 + X3 + X4 nhỏ nhất và

X1 * 100.000 + X2 * 50.000 + X3 * 20.000 + X4 * 10.000 = n.

Áp dụng kỹ thuật tham ăn để giải bài toán này là: để có tổng số tờ giấy bạc phải trả (X1 + X2 + X3 + X4) nhỏ nhất thì các tờ giấy bạc mệnh giá lớn phải được chọn nhiều nhất.

Trước hết ta chọn tối đa các tờ giấy bạc mệnh giá 100.000 đồng, nghĩa là X1 là số nguyên lớn nhất sao cho X1 * 100.000 £ n. Tức là X1 = n DIV 100.000.

Xác định số tiền cần rút còn lại là hiệu n – X1 * 100000 và chuyển sang chọn loại giấy bạc 50.000 đồng, và cứ tiếp tục như thế cho các loại mệnh giá khác

  1. Ví dụ

Khách hàng cần rút 1.290.000 đồng (n = 1290000), phương án trả tiền như sau:

X1 = 1290000 DIV 100000 = 12.

Số tiền cần rút còn lại là 1290000 – 12 * 100000 = 90000.

X2 = 90000 DIV 50000 = 1.

Số tiền cần rút còn lại là 90000 – 1 * 50000 = 40000.

X3 = 40000 DIV 20000 = 2.

Số tiền cần rút còn lại là 40000 – 2 * 20000 = 0.

X4 = 0 DIV 10000 = 0.

Ta có X = (12, 1, 2, 0), tức là máy ATM sẽ trả cho khách hàng 12 tờ 100.000 đồng, 1 tờ 50.000 đồng và 2 tờ 20.000 đồng.

Code

<?php
// so tien muon rut
$N = $_POST['money'];
$money = $N;
// Phuong an tra tien
$X = array(
    [500, 0],
    [200, 0],
    [100, 0],
    [50, 0],
    [20, 0],
    [10, 0],
    [5, 0],
    [2, 0],
    [1, 0],
);

foreach ($X as $m) {
    if (floor($N / $m[0]) > 0) {
        $m[1] = floor($N / $m[0]);
        $N -= $m[1] * $m[0];
    }
    echo "Giay Bac $m[0] = $m[1] <br>";
}
?>

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<h2>ATM SYSTEM</h2>
<div>
    <form action="" method="post">
        <input type="number" name="money" value="<?php echo $money ?>">
        <input type="submit">
    </form>
</div>
</body>
</html>

All rights reserved

Bình luận

Đăng nhập để bình luận
Avatar
0
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí