一.问题描述

  汉诺塔问题

二.设计思路

把N-1层的环子先通过C移到B,最后再把第N层的最大的环子移到C,这个时候就剩下一个N-1层的新“塔”,那么我们把他看成一个新的“塔”把B柱看成之前的A柱,通过C柱把(N-1)-1层移到A柱,再把第N-1层的最大(原本第二大)的环子放到C,如此循环最后N=1 就了解了。

三.流程图

四.伪代码 

1

五.代码实现 

#include<iostream>
using namespace std;
void hanoi(int n, char a, char b, char c)
{
	if (n == 1)
		cout << n << " " << a << " " << c << endl;
	else
	{
		hanoi(n - 1, a, c, b);
		cout << n << " " << a << " " << c << endl;
		hanoi(n - 1, b, a, c);
	}
}
int main()
{
	int n;
	cout << "输入正整数:" << endl;
	cin >> n;
	cout << "结果为" << endl;
	hanoi(n, 'A', 'B', 'C');
	/*
	假设有4层,跟全排列差不多的想法,先把他看成3层,再看成2层,而且移动的方法是相同的。*/
	return 0;
}

 

posted on 2023-05-21 23:51  leapss  阅读(14)  评论(0)    收藏  举报