# Lucky alive person in a circle | Set – 2

Given that N person (numbered 1 to N) standing as to form a circle. They all have the gun in their hand which is pointed to their leftmost Partner.

Every one shoots such that 1 shoot 2, 3 shoots 4, 5 shoots 6 …. (N-1)the shoot N (if N is even otherwise N shoots 1).

Again on the second iteration, they shoot the rest of remains as above mentioned logic (now for n as even, 1 will shoot to 3, 5 will shoot to 7 and so on).

The task is to find which person is the luckiest(didn’t die)?

**Examples**:

Input:N = 3

Output:3

As N = 3 then 1 will shoot 2, 3 will shoot 1 hence 3 is the luckiest person.

Input:N = 8

Output:1

Here as N = 8, 1 will shoot 1, 3 will shoot 4, 5 will shoot 6, 7 will shoot 8, Again 1 will shoot 3, 5 will shoot 7, Again 1 will shoot 5 and hence 1 is the luckiest person.

This problem has already been discussed in Lucky alive person in a circle | Code Solution to sword puzzle. In this post, a different approach is discussed.

**Approach:**

- Take the Binary Equivalent of N.
- Find its 1’s compliment and convert its equal decimal number N`.
- find |N – N`|.

Below is the implementation of the above approach:

`// C++ implementation of the above approach ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// Function to convert string to number ` `int` `stringToNum(string s) ` `{ ` ` ` ` ` `// object from the class stringstream ` ` ` `stringstream geek(s); ` ` ` ` ` `// The object has the value 12345 and stream ` ` ` `// it to the integer x ` ` ` `int` `x = 0; ` ` ` `geek >> x; ` ` ` ` ` `return` `x; ` `} ` ` ` `// Function to convert binary to decimal ` `int` `binaryToDecimal(string n) ` `{ ` ` ` `int` `num = stringToNum(n); ` ` ` `int` `dec_value = 0; ` ` ` ` ` `// Initializing base value to 1, i.e 2^0 ` ` ` `int` `base = 1; ` ` ` ` ` `int` `temp = num; ` ` ` `while` `(temp) { ` ` ` `int` `last_digit = temp % 10; ` ` ` `temp = temp / 10; ` ` ` ` ` `dec_value += last_digit * base; ` ` ` ` ` `base = base * 2; ` ` ` `} ` ` ` ` ` `return` `dec_value; ` `} ` ` ` `string itoa(` `int` `num, string str, ` `int` `base) ` `{ ` ` ` `int` `i = 0; ` ` ` `bool` `isNegative = ` `false` `; ` ` ` ` ` `/* Handle 0 explicitly, otherwise ` ` ` `empty string is printed for 0 */` ` ` `if` `(num == 0) { ` ` ` `str[i++] = ` `'0'` `; ` ` ` `return` `str; ` ` ` `} ` ` ` ` ` `// In standard itoa(), negative numbers ` ` ` `// are handled only with base 10. ` ` ` `// Otherwise numbers are considered unsigned. ` ` ` `if` `(num < 0 && base == 10) { ` ` ` `isNegative = ` `true` `; ` ` ` `num = -num; ` ` ` `} ` ` ` ` ` `// Process individual digits ` ` ` `while` `(num != 0) { ` ` ` `int` `rem = num % base; ` ` ` `str[i++] = (rem > 9) ? (rem - 10) + ` `'a'` `: rem + ` `'0'` `; ` ` ` `num = num / base; ` ` ` `} ` ` ` ` ` `// If the number is negative, append '-' ` ` ` `if` `(isNegative) ` ` ` `str[i++] = ` `'-'` `; ` ` ` ` ` `// Reverse the string ` ` ` `reverse(str.begin(), str.end()); ` ` ` ` ` `return` `str; ` `} ` ` ` `char` `flip(` `char` `c) ` `{ ` ` ` `return` `(c == ` `'0'` `) ? ` `'1'` `: ` `'0'` `; ` `} ` ` ` `// Function to find the ones complement ` `string onesComplement(string bin) ` `{ ` ` ` `int` `n = bin.length(), i; ` ` ` ` ` `string ones = ` `""` `; ` ` ` ` ` `// for ones complement flip every bit ` ` ` `for` `(i = 0; i < n; i++) ` ` ` `ones += flip(bin[i]); ` ` ` ` ` `return` `ones; ` `} ` ` ` `// Driver code ` `int` `main() ` `{ ` ` ` `// Taking the number of a person ` ` ` `// standing in a circle. ` ` ` `int` `N = 3; ` ` ` `string arr = ` `""` `; ` ` ` ` ` `// Storing the binary equivalent in a string. ` ` ` `string ans(itoa(N, arr, 2)); ` ` ` ` ` `// taking one's compelement and ` ` ` `// convert it to decimal value ` ` ` `int` `N_dash = binaryToDecimal(onesComplement(ans)); ` ` ` ` ` `int` `luckiest_person = N - N_dash; ` ` ` ` ` `cout << luckiest_person; ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

**Output:**

3

## Recommended Posts:

- Lucky alive person in a circle | Code Solution to sword puzzle
- Mid-Point Circle Drawing Algorithm
- Draw a circle without floating point arithmetic
- Maximum number of consecutive 1's in binary representation of all the array elements
- Maximum frequency of a remainder modulo 2
^{i} - Maximum Sum of Products of two arrays by toggling adjacent bits
- Split the binary string into substrings with equal number of 0s and 1s
- Sum of the updated array after performing the given operation
- Maximum Bitwise OR pair from a range
- Count of columns with odd number of 1s
- Number of subarrays with GCD = 1 | Segment tree
- Find closest integer with the same weight
- Minimum number of coins that can generate all the values in the given range
- Check whether the given decoded string is divisible by 6

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.