Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

กระทะทรงตัวโดยใช้น้ำหนักที่กำหนดซึ่งเป็นกำลังของตัวเลขในโปรแกรม C++


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