Computer >> Máy Tính >  >> Lập trình >> C ++

Tìm xem liệu có thể sắp xếp gọn gàng các cốc và kệ trong C ++ hay không

Khái niệm

Đối với ba loại cốc khác nhau (p []) và đĩa (q []), và m số kệ, hãy xác định xem có thể sắp xếp ngăn nắp các cốc và kệ hay không.

Giờ đây, việc sắp xếp cốc và đĩa sẽ gọn gàng nếu tuân theo các quy tắc sau -

  • Theo quy tắc đầu tiên, không có kệ nào có thể chứa cả cốc và đĩa.
  • Theo quy tắc thứ hai, không được có quá 5 cốc trong bất kỳ kệ nào.
  • Theo quy tắc thứ ba, không được có nhiều hơn 10 đĩa trong bất kỳ kệ nào.

Đầu vào

p[] = {4, 3, 7}
q[] = {5, 9, 10}
m = 11

Đầu ra

Yes

Giải thích

Tổng số cốc =14, số kệ cần thiết =3

Tổng số đĩa =24, giá bắt buộc =3

Vì vậy, tổng số kệ cần thiết =3 + 3 =6,

nhỏ hơn số kệ đã cho m. Vì vậy, đầu ra là Có.

Đầu vào

p[] = {5, 8, 5}
q[] = {4, 10, 11}
m = 3

Đầu ra

No

Tổng số cốc =18, số kệ cần thiết =4

Tổng số đĩa =25, giá bắt buộc =3

Vì vậy, tổng số kệ cần thiết =4 + 3 =7,

lớn hơn số kệ cho trước m. Vì vậy, đầu ra là Không.

Phương pháp

Để sắp xếp các cốc và đĩa, hãy xác định tổng số cốc p và tổng số đĩa q. Bởi vì, không thể có nhiều hơn 5 cốc trong kệ sames, do đó hãy xác định số giá tối đa cần thiết cho cốc theo công thức (p + 5-1) / 5 và số giá tối đa cần cho đĩa bằng cách thực hiện công thức ( q + 10-1) / 10. Có thể thấy rằng nếu tổng của hai giá trị này bằng hoặc nhỏ hơn m thì có thể sắp xếp được nếu không.

Ví dụ

// C++ code to find if neat
// arrangement of cups and
// shelves can be made
#include<bits/stdc++.h>
using namespace std;
// Shows function to check arrangement
void canArrange1(int p[], int q[], int m){
   int sump = 0, sumq = 0;
   // Used to calculate total number
   // of cups
   for(int i = 0; i < 3; i++)
      sump += p[i];
   // Used to calculate total number
   // of saucers
   for(int i = 0; i < 3; i++)
      sumq += q[i];
   // Now adding 5 and 10 so that if the
   // total sum is smaller than 5 and
   // 10 then we can get 1 as the
   // answer and not 0
   int mp = (sump + 5 - 1) / 5;
   int mq = (sumq + 10 - 1) / 10;
   if(mp + mq <= m)
      cout << "Yes";
   else
      cout << "No";
}
// Driver code
int main(){
   // Shows number of cups of each type
   int p[] = {4, 3, 7};
   // Shows number of saucers of each type
   int q[] = {5, 9, 10};
   // Shows number of shelves
   int m = 10;
   // ndicates calling function
   canArrange1(p, q, m);
   return 0;
}

Đầu ra

Yes