숫자 n을 나타내는 이진수가 있다고 가정해보세요. n보다 크지만 가장 작고, 0과 1의 개수가 같은 이진수를 찾아야 합니다. 따라서 숫자가 1011(10진수 11)이면 출력은 1101(10진수 13)이 됩니다. 이 문제는 다음 순열 계산을 사용하여 해결할 수 있습니다. 이 아이디어를 얻기 위해 알고리즘을 살펴보겠습니다.
nextBin(bin) −
Begin len := length of the bin for i in range len-2, down to 1, do if bin[i] is 0 and bin[i+1] = 1, then exchange the bin[i] and bin[i+1] break end if done if i = 0, then there is no change, return otherwise j:= i + 2, k := len – 1 while j < k, do if bin[j] is 1 and bin[k] is 0, then exchange bin[j] and bin[k] increase j and k by 1 else if bin[i] is 0, then break else increase j by 1 end if done return bin End
#include <iostream> using namespace std; string nextBinary(string bin) { int len = bin.size(); int i; for (int i=len-2; i>=1; i--) { if (bin[i] == '0' && bin[i+1] == '1') { char ch = bin[i]; bin[i] = bin[i+1]; bin[i+1] = ch; break; } } if (i == 0) "No greater number is present"; int j = i+2, k = len-1; while (j < k) { if (bin[j] == '1' && bin[k] == '0') { char ch = bin[j]; bin[j] = bin[k]; bin[k] = ch; j++; k--; } else if (bin[i] == '0') break; else j++; } return bin; } int main() { string bin = "1011"; cout << "Binary value of next greater number = " << nextBinary(bin); }
Binary value of next greater number = 1101
위 내용은 C 프로그램에서 동일한 수의 1과 0을 사용하여 다음으로 큰 숫자를 이진 표현합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!