使用C++程式平衡給定權重(權重為某個數的冪)的天平


陳述——使用給定權重(權重為某個數的冪)平衡天平。

描述——在這個問題中,我們給定一個天平秤和一個重量T,以及一些其他權重,其值是數字**a**的冪。我們需要使用給定的權重來平衡天平。

基於此,我們有以下等式:

T + (a的某個冪) = (a的另一個冪)

需要注意的是,每個冪值只有一個對應的權重。

示例:

T = 12 : a = 4

使用下面的值,我們可以平衡權重,如下所示:

12 + 4 = 16

現在,為了解決這個問題,我們需要將T表示為a的冪。為此,我們將T的基數從10進位制轉換為a進位制。

**情況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

更新於:2020年7月9日

93 次瀏覽

啟動你的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.