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

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

ข้อกำหนด − สมดุลชุดชั่งด้วยน้ำหนักที่เป็นกำลังของตัวเลข

คำอธิบาย − ในปัญหานี้เราได้รับเครื่องชั่งแบบจาน เราได้รับน้ำหนัก 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