ข้อกำหนด − สมดุลชุดชั่งด้วยน้ำหนักที่เป็นกำลังของตัวเลข
คำอธิบาย − ในปัญหานี้เราได้รับเครื่องชั่งแบบจาน เราได้รับน้ำหนัก T และน้ำหนักอื่นๆ ที่มีค่าเป็นกำลังของตัวเลข a เราต้องสมดุลชุดชั่งโดยใช้น้ำหนักที่กำหนด
จากนี้เรามีสมการนี้ −
T + (กำลังบางตัวของ a) = (กำลังอีกตัวของ a)
เราต้องจำว่า มีเพียงหนึ่งน้ำหนักเท่านั้นที่สอดคล้องกับค่ากำลัง
ตัวอย่าง
T = 12, a = 4
ใช้น้ำหนักด้านล่าง สามารถสมดุลได้เป็น
12 + 4 = 16
เพื่อแก้ปัญหานี้ เราต้องแทน T ในรูปของกำลังของ a โดยการเปลี่ยนฐานของ T เป็น a จากฐาน 10
กรณีที่ 1 − เมื่อเปลี่ยนฐานแล้ว ถ้าการแทนค่ามีแค่ 1 และ 0 น้ำหนักของ 1 สามารถสร้างค่า T ได้แบบบวกกัน
ตัวอย่าง
T = 10, a = 3
เปลี่ยนฐาน 10 เป็น 3 ได้ 101
จะสร้างได้จาก 30 และ 32 (1 + 9) = 10
กรณีที่ 2 − เมื่อเปลี่ยนฐานแล้ว ถ้าการแทนค่ามีค่าอื่นนอกจาก 1 และ 0 การสมดุลต้องการการดำเนินการเพิ่มเติม เงื่อนไขบังคับคือการแปลงฐานต้องมีค่าตัวเลขเป็น (a - 1) ในกรณีนี้ เราจะย้ายกำลังของค่านั้นไปด้าน T และเพิ่มตัวเลขในการแทนฐานขึ้น 1
ตัวอย่าง
T = 7, a = 3
เปลี่ยนฐาน 7 เป็น 3 ได้ 021
ย้าย 31 ไปด้าน T และเพิ่มอีกด้าน 1 ได้ตัวเลข = 10 แทนเป็น 101 คือ (9 + 1) ซึ่งสามารถสมดุลได้
จากกรณีข้างต้นเราจะสร้างโปรแกรมแก้ปัญหานี้
ตัวอย่าง
#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;
}
ผลลัพธ์
Balance is possible