使用二进制值解决汉诺塔问题的 C++ 程序
c++server side programmingprogramming更新于 2024/11/4 6:54:00
此 C++ 程序使用二进制值显示汉诺塔问题的解决方案。
每个磁盘都有一个二进制数字。
最高有效位代表最大的磁盘。值为 0 表示最大磁盘位于初始桩上,而值为 1 表示位于最终桩上。
位串从左到右读取,每个位都可用于确定相应磁盘的位置。
如果某个位的值与前一个位相同,则相应磁盘将堆叠在同一桩上的前一个磁盘之上。
如果不同,则意味着相应磁盘位于前一个磁盘左侧或右侧的一个位置。
算法
开始 以磁盘 n 的编号作为输入。 声明 n 和 a。 做一个 for 循环 a = 1 到 (1<<n) – 1 // 这里,(a & a – 1) = a 和 a – 1 按位与。 (a | a – 1) = a 和 a – 1 按位或。 这里 % 表示模数运算符。 // 打印结果表明将圆盘从桩号 (a & a – 1) % 3 移动到桩号 ((a | a – 1) + 1) % 3 结束
示例
#include<iostream> using namespace std; int main() { int n, a; cout<<"\nEnter the no of Disks: "; cin>>n; for (a = 1; a < (1 << n); a++) { cout<<"\nDisk Move from Peg "<<(a&a-1)%3 <<" to Peg "<<((a|a-1)+1)%3; } cout<<"\n"; }
输出
Enter the no of Disks: 3 Disk Move from Peg 0 to Peg 2 Disk Move from Peg 0 to Peg 1 Disk Move from Peg 2 to Peg 1 Disk Move from Peg 0 to Peg 2 Disk Move from Peg 1 to Peg 0 Disk Move from Peg 1 to Peg 2 Disk Move from Peg 0 to Peg 2