Given an integer **X**, the task is to find an optimal set of weights **{w _{1}, w_{2}, w_{3}, …, w_{n}}** such that we can weigh/determine all the weights from

**1**to

**X**using a two-sided weighing balance pan.

**Note**that all the weights must be unique and

**n**should be as minimum as possible.

**Examples:**

Input:X = 7

Output:1 3 9

Weights Left Side Right Side 1 1 12 2 + 133 3 34 4 1+35 5 + 1+396 6 + 397 7 + 31+9

Input:X = 20

Output:1 3 9 27

**Approach:**

- One optimal approach is to use weights which are a powers of 3 i.e.
**{1, 3, 9, 27, 81, 243, …}** - It can be proved through induction that using
**{1, 3, 9, 27, 81, …, pow(3, n)}**, we can balance all the weights from**1**to**(pow(3, n + 1) – 1) / 2**. - So, find the values of
**n**such that all the values from**1**to**X**can be balanced and print the results.

Below is the implementation of the above approach:

## C++

`// C++ implementation of the approach ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// Function to find the optimal weights ` `void` `findWeights(` `int` `X) ` `{ ` ` ` `int` `sum = 0; ` ` ` ` ` `// Number of weights required ` ` ` `int` `power = 0; ` ` ` ` ` `// Finding the value of required powers of 3 ` ` ` `while` `(sum < X) { ` ` ` `sum = ` `pow` `(3, power + 1) - 1; ` ` ` `sum /= 2; ` ` ` `power++; ` ` ` `} ` ` ` ` ` `// Optimal Weights are powers of 3 ` ` ` `int` `ans = 1; ` ` ` `for` `(` `int` `i = 1; i <= power; i++) { ` ` ` `cout << ans << ` `" "` `; ` ` ` `ans = ans * 3; ` ` ` `} ` `} ` ` ` `// Driver code ` `int` `main() ` `{ ` ` ` `int` `X = 2; ` ` ` ` ` `findWeights(X); ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Java

`// Java implementation of the approach ` `import` `java.util.*; ` ` ` `public` `class` `GFG ` `{ ` ` ` ` ` `// Function to find the optimal weights ` ` ` `static` `void` `findWeights(` `int` `X) ` ` ` `{ ` ` ` `int` `sum = ` `0` `; ` ` ` ` ` `// Number of weights required ` ` ` `int` `power = ` `0` `; ` ` ` `int` `number = ` `3` `; ` ` ` ` ` `// Finding the value of required powers of 3 ` ` ` `while` `(sum < X) ` ` ` `{ ` ` ` `sum = number - ` `1` `; ` ` ` `sum /= ` `2` `; ` ` ` `power++; ` ` ` `number *= ` `3` `; ` ` ` `} ` ` ` ` ` `// Optimal Weights are powers of 3 ` ` ` `int` `ans = ` `1` `; ` ` ` `for` `(` `int` `i = ` `1` `; i <= power; i++) ` ` ` `{ ` ` ` `System.out.print(ans + ` `" "` `); ` ` ` `ans = ans * ` `3` `; ` ` ` `} ` ` ` `} ` ` ` ` ` ` ` `// Driver code ` ` ` `public` `static` `void` `main (String[] args) ` ` ` `{ ` ` ` `int` `X = ` `2` `; ` ` ` ` ` `findWeights(X); ` ` ` ` ` `} ` `} ` ` ` `// This code is contributed by Sam007. ` |

*chevron_right*

*filter_none*

## Python3

`# Python3 implementation of the approach ` ` ` `# Function to find the optimal weights ` `def` `findWeights(X): ` ` ` ` ` `sum` `=` `0` ` ` ` ` `# Number of weights required ` ` ` `power ` `=` `0` ` ` ` ` `# Finding the value of required powers of 3 ` ` ` `while` `(` `sum` `< X): ` ` ` `sum` `=` `pow` `(` `3` `, power ` `+` `1` `) ` `-` `1` ` ` `sum` `/` `/` `=` `2` ` ` `power ` `+` `=` `1` ` ` ` ` `# Optimal Weights are powers of 3 ` ` ` `ans ` `=` `1` ` ` `for` `i ` `in` `range` `(` `1` `, power ` `+` `1` `): ` ` ` `print` `(ans, end ` `=` `" "` `) ` ` ` `ans ` `=` `ans ` `*` `3` ` ` `# Driver code ` `X ` `=` `2` ` ` `findWeights(X) ` ` ` `# This code is contributed by Mohit Kumar ` |

*chevron_right*

*filter_none*

## C#

`// C# implementation of the approach ` `using` `System; ` ` ` `class` `GFG ` `{ ` ` ` ` ` `// Function to find the optimal weights ` ` ` `static` `void` `findWeights(` `int` `X) ` ` ` `{ ` ` ` `int` `sum = 0; ` ` ` ` ` `// Number of weights required ` ` ` `int` `power = 0; ` ` ` `int` `number = 3; ` ` ` ` ` `// Finding the value of required powers of 3 ` ` ` `while` `(sum < X) ` ` ` `{ ` ` ` `sum = number - 1; ` ` ` `sum /= 2; ` ` ` `power++; ` ` ` `number *= 3; ` ` ` `} ` ` ` ` ` `// Optimal Weights are powers of 3 ` ` ` `int` `ans = 1; ` ` ` `for` `(` `int` `i = 1; i <= power; i++) ` ` ` `{ ` ` ` `Console.Write(ans + ` `" "` `); ` ` ` `ans = ans * 3; ` ` ` `} ` ` ` `} ` ` ` ` ` `// Driver code ` ` ` `static` `public` `void` `Main () ` ` ` `{ ` ` ` `int` `X = 2; ` ` ` `findWeights(X); ` ` ` `} ` `} ` ` ` `// This code is contributed by ajit. ` |

*chevron_right*

*filter_none*

**Output:**

1 3

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready.