使用二进制值解决汉诺塔问题的 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 (= 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

相关文章