Hai hóa đơn


Submit solution

Points: 1 (partial)
Time limit: 1.0s
Memory limit: 98M

Author:
Problem type

Sfiha là một món tương tự như pizza có nguồn gốc từ Levant, cụ thể là Baalbek, Lebanon, nhưng nó cũng phổ biến ở Thổ Nhĩ Kỳ như là một món tráng miệng [1]. Nó được giới thiệu ở Braxin và Argentina bởi người nhập cư ở Levantine, với tên gọi là esfiha hay esfirra.

Sfiha truyền thống làm từ thịt cừu, giống như dolma - chỉ đơn giản là thịt cừu trên mặt bánh, đã được gia vị nhẹ, bọc trong những chiếc lá nho nâu.

Ở Brazil, sfihas là thức ăn phổ biến đường phố vì chúng rẻ và nhanh. Sfihas được nướng trong lò dưới dạng gấp lại thành một bánh hình tam giác hoặc bánh tròn; Với các lớp phủ khác nhau, bao gồm phó mát, thịt lợn, thịt cừu, thịt bò hoặc rau.

Gilberto là nhà cung cấp sfiha nổi tiếng và được ưa thích. Mặc dù vậy, việc tính tiền không phải lúc nào cũng đúng vì anh ta chỉ có thể trả lại tiền thừa cho khác hàng bằng 2 loại hóa đơn khác nhau. Để làm cho cuộc sống của Gil dễ dàng hơn, hãy viết một chương trình để anh ta kiểm tra xem có thể đưa ra sự thay đổi chính xác bằng cách sử dụng hai hóa đơn khác nhau không.

Các hóa đơn có sẵn: 2, 5, 10, 20, 50 và 100.

Đầu vào

Đầu vào chứa một số nguyên N đại diện cho giá mua và sau đó một số nguyên M đại diện cho giá được thanh toán bởi khách hàng ( N < M ≤ 10^4 ). Đọc đầu vào cho đến khi N = M = 0.

Đầu ra

In "possible" nếu có thể đưa ra sự thay đổi chính xác hoặc "impossible" nếu không có.

VÍ DỤ

INPUT

11 23

500 650

100 600

9948 9963

1 2

2 4

0 0

OUTPUT

possible

possible

impossible

possible

impossible

impossible


Comments


  • 0
    TrinhThanhNam_CNTT1_K62  commented on Oct. 7, 2021, 4:55 a.m.

    include<iostream>

    using namespace std;
    
    int main()
    {
        int n = 1, m = 1, check = 0;
        int a[6] {2, 5, 10, 20, 50, 100};
        while (n != 0 and m !=0)
        {
            check = 0;
            cin >> n >> m;
            if (m == 0 and n == 0)
            {
                break;
            }
            int dis = m - n;
            for (int i = 0; i < 6; i++)
            {
                if (a[i] > dis or check == 1 or dis > 200)
                {
                    break;
                }   
                for (int j = 0; j < 6; j++)
                {
                    if ((a[i] + a[j]) == dis)
                    {
                        check = 1;
                        break;
                    }
                }
            }
            if (check == 1)
            {
                cout << "possible" << "\n";
            }
            else 
            {
                cout << "impossible" << "\n";
            }
        }
    }

    Code của e bị lỗi chỗ nào thế ạ :<


  • 0
    Phuc_CNTT3_K60  commented on May 12, 2020, 9:44 p.m.

    Anh CNTT2_K59 cứu em với @@


    • 1
      CNTT2_K59  commented on May 12, 2020, 11:43 p.m.

      #include <iostream>
      using namespace std;
      
      int solve(int n, int m) { //tham khảo ý tưởng của anh cotyey
          int excessCash = m - n, count = 0;
          int a[6] = {100, 50, 20, 10, 5, 2};
          if (excessCash >= 200) return 0;
          if (excessCash >= a[0]) excessCash -= a[0], count++;
          for (int i = 0; i < 5; ++i)
          {
              if (excessCash < a[i] && excessCash >= a[i + 1])
              {
                  excessCash -= a[i + 1]; count++; 
                  if (count > 2) return 0;
              }
          }
          return count == 2;
      }
      
      int main() {
          int n, m;
          do
          {
              cin >> n >> m;
              if (n && m) solve(n, m) ? cout << "possible" << endl : cout << "impossible" << endl;
          }
          while (n && m);
      
          return 0;
      }

  • 1
    DuyAnhhh  commented on April 26, 2020, 12:28 a.m.

    Ai cho em xin code bài này với ạ