SHOW:
|
|
- or go back to the newest paste.
| 1 | int[] numbers = { 1, 1, 1, -1, -1 };
| |
| 2 | ||
| 3 | int coefficientCombinations = (int) Math.Pow(2, numbers.Length) - 1; | |
| 4 | ||
| 5 | for (int coefficients = coefficientCombinations; coefficients > 0; coefficients--) | |
| 6 | {
| |
| 7 | if(onlyOneBitSet(coefficients)) | |
| 8 | {
| |
| 9 | continue; | |
| 10 | } | |
| 11 | int sum = 0; | |
| 12 | for (int index = 0; index < numbers.Length; index++) | |
| 13 | {
| |
| 14 | int bitIndex = (numbers.Length - 1) - index; | |
| 15 | int numberIndex = index; | |
| 16 | int coefficient = getBit(coefficients, bitIndex); | |
| 17 | sum += coefficient * numbers[numberIndex]; | |
| 18 | } | |
| 19 | if (sum == 0) | |
| 20 | {
| |
| 21 | //Print the Sum | |
| 22 | } | |
| 23 | } | |
| 24 | ||
| 25 | static int getBit(int coefficients, int bitIndex) | |
| 26 | {
| |
| 27 | return (coefficients >> bitIndex) & 1; | |
| 28 | } | |
| 29 | ||
| 30 | static bool onlyOneBitSet(int coefficients) | |
| 31 | {
| |
| 32 | int setBitCount = 0; | |
| 33 | int highestBit = 31; | |
| 34 | for(int i = 0; i <= highestBit; i++) | |
| 35 | {
| |
| 36 | if(((coefficients >> i) & 1) == 1) | |
| 37 | {
| |
| 38 | setBitCount++; | |
| 39 | } | |
| 40 | } | |
| 41 | if(setBitCount == 1) | |
| 42 | {
| |
| 43 | return true; | |
| 44 | } | |
| 45 | else | |
| 46 | {
| |
| 47 | return false; | |
| 48 | } | |
| 49 | } |