算法设计(一)

news2024/9/25 17:10:10

1.汉诺塔

介绍

汉诺塔(Hanoi Tower):它描述了如何将一堆大小不同、穿在一根柱子上的盘子移动到另一根柱子上,同时满足以下规则:
每次只能移动一个盘子。
每个移动盘子时,大的盘子不能放在小的盘子上面。
可以使用一根额外的柱子作为辅助。

算法实现

package com.practice.java;

import java.util.Scanner;

public class Example1 {
	//移动次数
	public static int val(int m) {
		int num;
		if(m == 1) {
			num = 1;
		}else {
			num = 2 * val(m - 1) + 1;
		}
		return num;
	}
	//移动过程
	public static void Hannoi(int n,char A,char B,char C) {
		if(n == 1) {
			move(1,A,C);
		}else {
			Hannoi(n-1,A,C,B);
			move(n,A,C);
			Hannoi(n-1,B,A,C);
		}
	}
	private static void move(int i, char x, char y) {
		System.out.println("把" + i + "号盘子从" + x + "移动到" + y);
	}
	public static void main(String[] args) {
		int num = 0;
		System.out.print("请输入需要移动盘子的数量: ");
		Scanner scanner = new Scanner(System.in);
		num = scanner.nextInt();
		if(num == 0) {
			System.out.println("输入的数量必须大于0!");
		}else {
			System.out.println("一共需要移动:" + val(num) + "次");
			System.out.println("移动过程如下:");
			Hannoi(num,'A','B','C');
		}
		scanner.close();
	}

}

2.斐波那契数列

介绍

斐波那契数列(Fibonacci sequence) 又称黄金分割数列 ,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称“兔子数列”,其数值为:1、1、2、3、5、8、13、21、34……在数学上,这一数列以如下递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)。

算法实现

package com.practice.java;

import java.util.Scanner;
public class Example2 {
	public static int fib(int n) {
		int f = 0;
		if(n == 0) {
			return 0;
		}
		if(n == 1) {
			return 1;
		}
		f = fib(n-2) + fib(n -1);
		return f;
	}

	public static void main(String[] args) {
		int n,m = 0;
		System.out.print("请输入一个整数: ");
		Scanner scanner = new Scanner(System.in);
		n = scanner.nextInt();
		m = fib(n);
		System.out.print("第" + n + "项是:" + m);
		m = 0;
		for(int i = 1;i <= n;i++) {
			m += fib(i);
		}
		System.out.println("前" + n + "项和是:" + m);
		scanner.close();
	}
}

3.八皇后

介绍

八皇后:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上

算法实现

package com.practice.java;
public class Example3 {
	static int Num = 0;//统计方案个数
	static boolean c[] = new boolean[9];//判断当列是否可放皇后
	static boolean L[] = new boolean[17];//判断左对角线是否可放皇后
	static boolean R[] = new boolean[17];//判断右对角线是否可放皇后

	static final int Normalize = 9;        //统一数组下标为正数             
	static int Queen[] = new int[9];       //标记皇后
	
	public static void check(int i) {
		for(int j = 1;j <= 8;j++) {
			if ((c[j] == true) && (L[i - j + Normalize] == true) && (R[i + j] == true)){//表示i行j列可放
				Queen[i] = j;
				c[j] = false;
				L[i -j + Normalize] = false;
				R[i + j] = false;
				if(i < 8) {//继续放置皇后
					check(i + 1);
				}else {//放完八个皇后
					Num++;
					System.out.println("方案" + Num +":");
					for(int k = 1;k <= 8;k++) {
						System.out.print(k + "行" + Queen[k] +"列" + "  ");
					}
					System.out.println();
				}
				c[j] = true;
				L[i -j + Normalize] = true;
				R[i + j] = true;
			}	
		}
	}
	public static void main(String[] args) {
		for(int i = 1;i < 9;i++) {
			c[i] = true;
		}
		for(int i = 0;i < 17;i++) {
			L[i] = R[i] = true;
		}
		check(1);			
	}
}

请添加图片描述
感谢大家的支持,关注,评论,点赞!
再见!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2126088.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

若依RuoYi项目环境搭建教程(RuoYi-Vue + RuoYi-Vue3版本)

文章目录 一、开发脚手架选择二、RuoYi框架1、介绍2、版本发展3、为什么选择若依4、优缺点5、项目内置功能 三、后端项目部署1、拉取源码2、环境要求3、Maven构建4、MySQL相关&#xff08;1&#xff09;导入SQL脚本&#xff08;2&#xff09;配置信息 5、Redis相关&#xff08;…

crdownload格式后缀的文件是什么东西?crdownload格式是什么

crdownload格式就是浏览器没下载完成的文件&#xff0c;如果下载完成了&#xff0c;那么就显示正常的格式和文件名了。

ARM32开发——DMA

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 基础概念CPURAM外设 ARM32程序存储 执行过程取数据 执行操作流程总结 基础概念 CPU CPU&#xff08;Central Processing Unit&am…

[点云处理] cloud compare二次插件功能开发(三)CC插件总结与加速开发

本文完成一个点云变换的插件&#xff0c;同时也是对CC接口的使用做进一步说明&#xff0c;进一步理解CC插件开发流程&#xff0c;利用CC平台和已有代码加快实现定制功能。 这个功能在 cc 已有的功能已经存在&#xff0c;位于 edit->apply_transformation 这里 文件逻辑组织还…

如何让人工智能训练更快

影响人工智能训练时间的因素 在深度学习训练中&#xff0c;训练时间的计算涉及到多个因素&#xff0c;包括 epoch 数、全局 batch size、微 batch size、计算设备数量等。下面是一个基本的公式来说明这些参数之间的关系&#xff08;注意&#xff0c;这只是一个基本的说明公式&…

改变事件

窗口的某些属性的状态发生改变时就会触发该事件 对应的事件类型包括 QEvent::ToolBarChange, QEvent::ActivationChange, QEvent::EnabledChange, QEvent::FontChange,QEvent::StyleChange, QEvent::PaletteChange, QEvent::WindowTitleChange, QEvent::IconTextChange, QEve…

【大模型基础】P2 Bag-of-Words

目录 词袋模型 概述词袋模型 实例第1步 构建语料库第2步 对句子进行分词第3步 创建词汇表第4步 转换词袋表示第5步 计算余弦相似度 词袋模型的局限性 词袋模型 概述 词袋模型&#xff0c;Bag-of-Words&#xff0c;是一种简单的文本表示方法&#xff0c;也是 NLP 中的一个经典模…

【Arcgis基础教程】GIS数据制备,空间分析与高级建模实践应用

随着信息技术的发展,数字地球、智慧地球等新概念的出现&#xff0c;人们对信息的需求日益提高&#xff0c;使得地理信息系统(GIS)在国民经济各个行业中获得了日益广泛的应用。尤其在当今大数据时代&#xff0c;面对海量的空间数据及个性化的地理信息服务&#xff0c;如何高效地…

Outlook如何归档?

文章目录 一&#xff0e; 目的二&#xff0e; 问题详述三&#xff0e; 解决办法1、打开ouutlook文件2、设置存档文件夹3、设置存档文件夹4、选中邮箱点击确定5、如果备份失败的操作方法 四&#xff0e; 注意事项 一&#xff0e; 目的 解决OUTLOOK邮箱爆满造成无法接收邮件的问题…

猫头虎分享:看完百度内部讲话,整理出李彦宏关于大模型的10个判断

&#x1f981; 猫头虎分享&#xff1a;看完百度内部讲话&#xff0c;整理出李彦宏关于大模型的10个判断 &#x1f4e2; 大家好&#xff01;我是猫头虎技术团队的首席写作官。今天为大家带来一篇重量级内容&#xff1a;从百度内部讲话中&#xff0c;整理了李彦宏对大模型的10大…

LIO-SAM如何保存地图

一、找到LIO-SAM配置文件&#xff0c;路径为config/params.yaml&#xff0c;修改以下两项参数&#xff1a; savePCD: true # https://github.com/TixiaoShan/LIO-SAM/issues/3savePCDDirectory: "/home/slam/catkin_ws/src/maps" …

通讯录 - 动态内存开辟版本

文章目录 前言 一、思想 二、contact.h 三、test.c 四、contact.c 1、初始化通讯录 2、判断容量 3、增加联系人 4、封装的查找的函数 5、删除联系人 6、查找联系人 7、修改联系人 八、展示通讯录 九、排序 十、释放空间 总结 前言 路漫漫其修远兮&#xff0c;吾将上下而求索&…

盘点2024年4款高质量的英语翻译工具

英语目前对我们来说仍然是一门很重要的语言&#xff0c;在日常生活中&#xff0c;如果我们需要频繁的接触到英语的话&#xff0c;除了要积极提升自己的英语翻译能力之外&#xff0c;借助一些高效的英语翻译工具也是很有必要的。所以今天就跟大家分享一些我觉得比较好用的翻译工…

Kotlin 特性之扩展函数

什么是扩展函数 扩展函数是 Java 不具备的&#xff0c;而 Kotlin 独有的特性&#xff0c;在日常开发中使用频率很高&#xff0c;类似于设计模式中的装饰模式&#xff0c;其作用就是在不改变原有类的情况下&#xff0c;扩展新的功能。 如何使用扩展函数和扩展属性 扩展函数的…

通信工程学习:什么是ASK振幅键控、FSK频移键控、PSK相移键控

ASK振幅键控、FSK频移键控、PSK相移键控 ASK&#xff08;振幅键控&#xff09;、FSK&#xff08;频移键控&#xff09;和PSK&#xff08;相移键控&#xff09;是三种常见的数字调制技术&#xff0c;它们各自通过不同的方式改变载波的某个参数来传输数字信息。以下是对这三种调制…

微软 Power Apps MDA 模型驱动应用解决Image字段查询出来缩略图问题变原图方法(c#+Plugin方式)

微软 Power Apps MDA 模型驱动应用解决Image字段查询出来缩略图问题变原图方法&#xff08;c#Plugin方式&#xff09; 在某些特定的场景中&#xff0c;需要将Image字段中的图片取出来&#xff0c;一般来说直接查询这个字段可以直接取&#xff0c;取出来的就是一个Base64格式的图…

【linux-Day2】linux下的基本指令

【linux-Day2】linux下的基本指令 一键查看操作系统的重要地位linux下的基本指令&#x1f4e2;ls&#xff1a;显示当前目录下所有的子目录和文件&#x1f4e2;pwd&#xff1a;显示用户当前所在的目录&#xff0c;在windows中&#xff0c;相当于显示当前目录的绝对路径。&#x…

推理与训练,分布式训练

什么是推理training 在人工智能领域&#xff0c;推理是指经过训练的机器学习模型从全新的数据&#xff08;输入&#xff09;中得出结论&#xff08;输出&#xff09;的过程。通俗地讲&#xff0c;推理是模型的实际运行。 什么是训练 inference 在人工智能领域&#xff0c;训…

Linux内核初始化过程中加载TCP/IP协议栈

Linux内核初始化过程中加载TCP/IP协议栈 Linux内核初始化过程中加载TCP/IP协议栈&#xff0c;从start_kernel、kernel_init、do_initcalls、inet_init&#xff0c;找出Linux内核初始化TCP/IP的入口位置&#xff0c;即为inet_init函数。 Linux内核启动过程 之前的实验中我们设…

差值图中像素总和的正负性(极性)含义

1. 正总和的含义 当 I1 减去 I2 的差值图总和为正时&#xff0c;这意味着整体上 I1 的像素值比 I2 高。即&#xff1a; 表示&#xff1a; 2. 局部亮度变化 即便差值图的总和为正&#xff0c;也不能确保 I1 在所有区域都比 I2 亮。差值图的正总和只是表明在整个图像中&#xf…