STATEMENT - กระทะทรงตัวโดยใช้น้ำหนักที่กำหนดซึ่งเป็นกำลังของตัวเลข
DESCRIPTION - ในปัญหานี้เราได้รับเครื่องชั่งน้ำหนักแบบกระทะ เราได้รับน้ำหนัก 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
ดังนั้นจะทำโดยใช้ 3 0 และ 3 2 (1 + 9) =10.
กรณีที่ 2 − ในการเปลี่ยนฐาน หากการแสดงมีค่าอื่นที่ไม่ใช่ค่า 1 และ 0 เท่านั้น การปรับสมดุลจำเป็นต้องมีการดำเนินการเพิ่มเติม ในที่นี้ เงื่อนไขบังคับสำหรับโซลูชันคือการแปลงฐานควรมีค่าตัวเลขเป็น (a - 1) ในกรณีนี้ เราจะโอนกำลังของค่าไปยังไดดีของ T และเพิ่มจำนวนในการแทนค่าฐานขึ้น 1
มาดูตัวอย่างกัน
T = 7 : a = 3
ในการเปลี่ยนฐานของ 7 เป็น 3 เราจะได้ 021
กำลังโอน 3 1 ไปทางด้าน 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