C程序中具有相同数量的1和0的下一个更大数字的二进制表示?

2023年 8月 29日 86.9k 0

C程序中具有相同数量的1和0的下一个更大数字的二进制表示?

假设我们有一个二进制数,它表示一个数字n。我们需要找到一个二进制数,它比n大但是最小,并且它也有相同数量的0和1。所以如果这个数是1011(十进制为11),那么输出将是1101(十进制为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

登录后复制

Example

的中文翻译为:

示例

#include
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

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论