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