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

Cân chảo bằng cách sử dụng các trọng số đã cho là lũy thừa của một số trong chương trình C ++

STATEMENT - Chảo cân bằng cách sử dụng trọng lượng đã cho là lũy thừa của một số.

MÔ TẢ - Trong bài toán này, chúng tôi được cung cấp một máy cân dựa trên chảo. chúng ta được cho một trọng số T và một số trọng số khác có giá trị là lũy thừa của một số a. Chúng ta cần cân bằng các chảo bằng cách sử dụng các trọng lượng đã cho.

Bây giờ, dựa trên điều này, chúng tôi có phương trình này,

T + (một số lũy thừa của a) =(một số lũy thừa khác của a)

Bây giờ, chúng ta nên nhớ rằng có chính xác một trọng số tương ứng với một giá trị lũy thừa.

Ví dụ,

T = 12 : a = 4

Sử dụng các giá trị dưới đây, chúng tôi có thể cân bằng các trọng số như,

12 + 4 = 16

Bây giờ, chúng ta giải quyết vấn đề này, chúng ta cần biểu diễn T theo lũy thừa của a. Đối với điều này, chúng tôi sẽ thay đổi cơ sở của T thành a từ cơ sở 10

TRƯỜNG HỢP 1 - Khi thay đổi cơ số, nếu biểu diễn chỉ có giá trị 1 và 0. Sau đó, trọng số của 1 có thể được sử dụng để cộng thêm giá trị của T.

Hãy lấy một ví dụ,

T = 10 : a = 3,

Thay đổi cơ số 10 thành 3, giá trị trở thành 101.

Vì vậy, di chúc được thực hiện bằng cách sử dụng 3 0 và 3 2 (1 + 9) =10.

TRƯỜNG HỢP 2 - Khi thay đổi cơ số, nếu biểu diễn chỉ có các giá trị khác với giá trị 1 và 0, thì việc cân bằng cần thực hiện thêm một số thao tác. Ở đây, điều kiện bắt buộc cho lời giải là chuyển đổi cơ số phải có giá trị chữ số là (a - 1). Trong trường hợp này, chúng tôi sẽ chuyển sức mạnh của giá trị sang T’s dide. Và tăng số trong biểu diễn cơ sở lên 1.

Hãy lấy một ví dụ,

T = 7 : a = 3

Khi thay đổi cơ số 7 thành 3, chúng ta sẽ nhận được 021.

Chuyển 3 1 sang cạnh T và tăng cạnh kia thêm 1. Chúng ta nhận được số =10 được biểu thị là 101, tức là (9 + 1). Cái nào có thể được cân bằng.

Dựa trên các trường hợp trên, chúng tôi sẽ tạo ra một chương trình để giải quyết vấn đề này.

Ví dụ

#include <bits/stdc++.h>
using namespace std;
bool isBalancePossible(int T, int a){
   vector<int> baseForm;
   while (T) {
      baseForm.push_back(T % a);
      T /= a;
   }
   baseForm.push_back(0);
   for (int i = 0; i < baseForm.size(); i++) {
      if (baseForm[i] != 0 && baseForm[i] != 1 &&
      baseForm[i] != (a - 1) && baseForm[i] != a)
      return false;
   if (baseForm[i] == a || baseForm[i] == (a - 1))
      baseForm[i + 1] += 1;
   }
   return true;
}
int main(){
   int T = 21;
   int a = 4;
   if (isBalancePossible(T, a))
      cout << "Balance is possible" << endl;
   else
      cout << "Balance is not possible" << endl;
   return 0;
}

Đầu ra

Balance is possible