栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【汉诺塔问题】C语言

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【汉诺塔问题】C语言

目录
  • C语言解决汉诺塔问题
    • 汉诺塔问题
      • 问题描述
      • 实际实现
      • 通项
      • C语言代码
      • 迭代(循环)方式实现

C语言解决汉诺塔问题 汉诺塔问题 问题描述

现存A、B、C三个木桩,A木桩上套有n层积木,现要将A木桩上的积木全部转移到C木桩上,试求最小操作次数c(n)。操作限制:每次只能移动一块积木,积木只能置于比它大的积木之上。(下文用序数表示积木,序数越大,积木越大)

实际实现

n=1时,直接将积木1从A木桩移动到C木桩,c=1;
n=2时,先将积木1从A木桩移动到B木桩,再将积木2从A木桩移动到C木桩,最后将积木1从B木桩移动到C木桩,c=3;
n=3时,先将积木1从A木桩移动到C木桩,将积木2从A木桩移动到B木桩,将积木1从C木桩移动到B木桩,将积木3从A木桩移动到C木桩,将积木1从B木桩移动到A木桩,将积木2从B木桩移动到C木桩,最后将积木1从A木桩移动到C木桩,c=7;
…

通项

为了实现将A木桩的n层积木全部转移到C木桩上,需要将A木桩上的(n-1)层积木(1,2,…,n-1)转移到B木桩上,操作次数为c(n-1);再将A木桩上的最底层积木移动到C木桩,操作次数为1;最后将B木桩上的(n-1)层积木转移到C木桩上,操作次数为c(n-1)。
总操作次数为2c(n-1)+1=c(n).

C语言代码
//函数递归部分
int Han(int n) {
	if (n == 1) {
		return 1;
	}
	else {
		return 2 * Han(n - 1) + 1;
	}
}
int main() {
	int n = 0;
	printf("请输入汉诺塔层数:");
	scanf("%d", &n);
	int c = Han(n);
	printf("最小操作次数为:%dn", c);
	return 0;
}
迭代(循环)方式实现
//函数迭代部分
int Han(int n) {
	int i = 0, count = 0;
	for (i = 1; i <= n; i++) {
		count = count * 2 + 1;
	}
	return count;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1029585.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号