#include <iostream>
#include <string>
// Function to find all N-digit binary numbers having
// more 1's than 0's at any position
void Solution(std::string _currentNumber, int _extraOnes, int _remainingPlaces)
{
// If the number is completed, print it
if (0 == _remainingPlaces)
{
std::cout << _currentNumber << std::endl;
return;
}
// Append 1 to the current number and reduce the remaining places by one
Solution(_currentNumber + "1", _extraOnes + 1, _remainingPlaces - 1);
// If there are more ones than zeroes, append 0 to the current number
// and reduce the remaining places by one
if (0 < _extraOnes)
{
Solution(_currentNumber + "0", _extraOnes - 1, _remainingPlaces - 1);
}
}
int main(void)
{
const int numberOfDigits = 4;
std::string str;
Solution(str, 0, numberOfDigits);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKLy8gRnVuY3Rpb24gdG8gZmluZCBhbGwgTi1kaWdpdCBiaW5hcnkgbnVtYmVycyBoYXZpbmcgCi8vIG1vcmUgMSdzIHRoYW4gMCdzIGF0IGFueSBwb3NpdGlvbgp2b2lkIFNvbHV0aW9uKHN0ZDo6c3RyaW5nIF9jdXJyZW50TnVtYmVyLCBpbnQgX2V4dHJhT25lcywgaW50IF9yZW1haW5pbmdQbGFjZXMpCnsKCS8vIElmIHRoZSBudW1iZXIgaXMgY29tcGxldGVkLCBwcmludCBpdAoJaWYgKDAgPT0gX3JlbWFpbmluZ1BsYWNlcykKCXsKCQlzdGQ6OmNvdXQgPDwgX2N1cnJlbnROdW1iZXIgPDwgc3RkOjplbmRsOwoJCXJldHVybjsKCX0KCgkvLyBBcHBlbmQgMSB0byB0aGUgY3VycmVudCBudW1iZXIgYW5kIHJlZHVjZSB0aGUgcmVtYWluaW5nIHBsYWNlcyBieSBvbmUKCVNvbHV0aW9uKF9jdXJyZW50TnVtYmVyICsgIjEiLCBfZXh0cmFPbmVzICsgMSwgX3JlbWFpbmluZ1BsYWNlcyAtIDEpOwoKCS8vIElmIHRoZXJlIGFyZSBtb3JlIG9uZXMgdGhhbiB6ZXJvZXMsIGFwcGVuZCAwIHRvIHRoZSBjdXJyZW50IG51bWJlciAKCS8vIGFuZCByZWR1Y2UgdGhlIHJlbWFpbmluZyBwbGFjZXMgYnkgb25lCglpZiAoMCA8IF9leHRyYU9uZXMpCgl7CgkJU29sdXRpb24oX2N1cnJlbnROdW1iZXIgKyAiMCIsIF9leHRyYU9uZXMgLSAxLCBfcmVtYWluaW5nUGxhY2VzIC0gMSk7Cgl9Cn0KCmludCBtYWluKHZvaWQpCnsKCWNvbnN0IGludCBudW1iZXJPZkRpZ2l0cyA9IDQ7CglzdGQ6OnN0cmluZyBzdHI7CgkKCVNvbHV0aW9uKHN0ciwgMCwgbnVtYmVyT2ZEaWdpdHMpOwoKCXJldHVybiAwOwp9