JAVA经典算法案例

合集下载

JAVA经典算法50题(3)【面试+工作】

JAVA经典算法50题(3)【面试+工作】

JAVA经典算法50题(3)【面试+工作】JAVA经典算法50题(3)【面试+工作】【程序21】题目:求1+2!+3!+...+20!的和。

1.程序分析:此程序只是把累加变成了累乘。

public class Demo21 {public static void main(String[] args) {long sum = 0;long fac = 1;for (int i = 1; i <= 20; i++) {fac = fac * i;sum += fac;}System.out.println(sum);}}【程序22】题目:利用递归方法求5!。

1.程序分析:递归公式:f(n)=f(n-1)*4!import java.util.Scanner;public class Demo22 {public static long fac(int n) {long value = 0;if (n == 1 || n == 0) {value = 1;} else if (n > 1) {value = n * fac(n - 1);}return value;}public static void main(String[] args) {System.out.println("请输入一个数:");Scanner in = new Scanner(System.in);int n = in.nextInt();System.out.println(n + "的阶乘为:" + fac(n));}}【程序23】题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。

问第4个人岁数,他说比第3个人大2岁。

问第三个人,又说比第2人大两岁。

问第2个人,说比第一个人大两岁。

最后问第一个人,他说是10岁。

请问第五个人多大?1.程序分析:利用递归的方法,递归分为回推和递推两个阶段。

JAVA编程实例大全及详解答案(50例)

JAVA编程实例大全及详解答案(50例)

JA V A编程实例大全及详解答案(50例)【程序1】题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?//这是一个菲波拉契数列问题public class lianxi01 {public static void main(String[] args) {System.out.println("第1个月的兔子对数: 1");System.out.println("第2个月的兔子对数: 1");int f1 = 1, f2 = 1, f, M=24;for(int i=3; i<=M; i++) {f = f2;f2 = f1 + f2;f1 = f;System.out.println("第" + i +"个月的兔子对数: "+f2);}}}【程序2】题目:判断101-200之间有多少个素数,并输出所有素数。

程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。

public class lianxi02 {public static void main(String[] args) {int count = 0;for(int i=101; i<200; i+=2) {boolean b = false;for(int j=2; j<=Math.sqrt(i); j++){if(i % j == 0) { b = false; break; }else { b = true; }}if(b == true) {count ++;System.out.println(i );}}System.out.println( "素数个数是: " + count);}}【程序3】题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。

java辗转相除法

java辗转相除法

java辗转相除法Java辗转相除法是一种常用的求最大公约数的算法。

它通过不断地用两个数的余数来替换原来的两个数,直到两个数中的一个变为0为止,此时另一个非零的数就是这两个数的最大公约数。

辗转相除法的原理很简单,但其实现方式有多种。

下面我将介绍一种常见的实现方式,并给出Java代码示例。

一、辗转相除法的原理辗转相除法,也称为欧几里得算法,其核心思想是利用除法的性质来逐步缩小求解范围。

具体步骤如下:1. 取两个正整数a和b(a > b);2. 用a除以b,得到余数r;3. 若r等于0,则b即为最大公约数;4. 若r不等于0,则a等于b,b等于r,再次执行第2步;5. 重复执行第2步和第3步,直到r等于0,此时上一次的b就是最大公约数。

二、Java代码示例下面是使用Java语言实现辗转相除法的代码示例:```javapublic class GCDAlgorithm {public static void main(String[] args) {int a = 48;int b = 36;int gcd = getGCD(a, b);System.out.println("最大公约数为:" + gcd);}public static int getGCD(int a, int b) {while (b != 0) {int temp = a % b;a = b;b = temp;}return a;}}```在上述代码示例中,我们通过一个`getGCD`方法来实现辗转相除法。

首先,我们使用一个`while`循环,判断当`b`不等于0时,执行循环体中的操作。

在循环体中,我们用`temp`来保存`a`除以`b`的余数,然后将`b`赋值给`a`,将`temp`赋值给`b`。

重复执行该过程,直到`b`等于0为止。

最终,我们得到的`a`就是两个数的最大公约数。

三、辗转相除法的应用辗转相除法不仅可以求解最大公约数,还可以用于其他一些与最大公约数相关的问题,例如判断两个数是否互质、求解线性同余方程等。

knn java应用案例

knn java应用案例

knn java应用案例KNN(K-Nearest Neighbors)是一种经典的机器学习算法,它可以用于分类和回归问题。

它的基本思想是通过计算新样本与已有样本的距离,找出距离最近的K个样本,然后根据这K个样本的标签进行分类或回归预测。

KNN算法简单易懂,容易实现,并且不需要对数据进行假设,因此在实际应用中非常常见。

下面我们将列举一些KNN算法在Java应用中的案例。

1. 手写数字识别在机器学习领域,手写数字识别是一个经典的问题。

我们可以使用KNN算法来实现手写数字的识别。

通过将图像转化为向量表示,计算待识别数字与已有数字的距离,找出距离最近的K个数字,然后根据这K个数字的标签,确定待识别数字的类别。

2. 电影推荐在电影推荐系统中,可以使用KNN算法来实现基于用户的协同过滤。

通过计算用户之间的相似度,找出与目标用户最相似的K个用户,然后根据这K个用户的评分,预测目标用户对未观看电影的评分,从而进行推荐。

3. 疾病预测在医学领域,可以使用KNN算法来预测疾病的发病风险。

通过计算患者与已有病例之间的相似度,找出与患者最相似的K个病例,然后根据这K个病例的结果,预测患者是否患有某种疾病。

4. 信用评级在金融领域,可以使用KNN算法来进行信用评级。

通过计算待评级个体与已有个体之间的距离,找出与待评级个体最相似的K个个体,然后根据这K个个体的信用等级,预测待评级个体的信用等级。

5. 图像分类在图像处理领域,可以使用KNN算法来进行图像分类。

通过将图像转化为特征向量,计算待分类图像与已有图像的距离,找出距离最近的K个图像,然后根据这K个图像的类别,确定待分类图像的类别。

6. 智能推拿机器人在智能推拿机器人的设计中,可以使用KNN算法来实现对人体部位的识别。

通过将人体部位的图像转化为特征向量,计算待识别部位与已有部位的距离,找出距离最近的K个部位,然后根据这K个部位的标签,确定待识别部位的名称。

7. 垃圾邮件过滤在电子邮件系统中,可以使用KNN算法来进行垃圾邮件过滤。

java经典案例

java经典案例

java经典案例Java是一门广泛应用于开发各种类型程序的编程语言,其灵活性和高效性使得它成为了众多开发者的首选。

下面我将为大家介绍几个经典的Java案例,帮助大家更好地理解和运用Java语言。

案例一:学生成绩管理系统学生成绩管理系统是一个实用的案例,可以帮助学校管理学生的各科成绩。

该系统可以实现对学生信息的录入、保存和查询,还可以计算学生的平均成绩,并根据成绩进行排名。

这个案例涉及到Java中的面向对象编程和文件操作,可以帮助学习者熟悉Java的语法和基本操作。

案例二:银行系统银行系统是一个常见的案例,可以模拟银行的基本操作,如开户、存款、取款、转账等。

这个案例涉及到Java中的面向对象编程和异常处理,帮助学习者理解如何设计一个实际应用中的系统,并处理用户输入的异常情况。

案例三:图书管理系统图书管理系统是一个实用的案例,可以帮助图书馆对图书进行管理和借还操作。

该系统可以实现对图书信息的录入、保存和查询,还可以记录图书的借出和归还情况。

这个案例涉及到Java中的面向对象编程、集合类和文件操作,帮助学习者理解Java中常用的数据结构和操作方法。

案例四:网络聊天室网络聊天室是一个常见的案例,可以模拟多个用户之间通过网络进行聊天的场景。

该系统可以实现用户的注册、登录和发送消息等功能,还可以实现用户之间的私聊和群聊。

这个案例涉及到Java中的网络编程和多线程技术,可以帮助学习者理解网络通信的基本原理和多线程并发的实现。

案例五:在线商城在线商城是一个实际应用中常见的案例,可以实现商品的展示、购买和订单管理等功能。

该系统可以实现用户的注册和登录,还可以将用户的浏览记录和购买记录保存到数据库中,并根据用户的行为进行推荐。

这个案例涉及到Java中的Web开发和数据库操作,可以帮助学习者理解Web应用的基本开发流程和与数据库的交互。

以上案例只是Java中经典案例的一部分,通过学习和实践这些案例,可以帮助我们更好地掌握Java的基本语法和常用技术,并为实际项目的开发打下坚实的基础。

Java面向对象编程实战案例

Java面向对象编程实战案例

Java面向对象编程实战案例1. 简介Java面向对象编程(Object-Oriented Programming,OOP)是一种常用的编程范式,它以对象为中心,通过封装、继承和多态等特性来组织和管理代码。

本文将介绍一些实战案例,展示Java面向对象编程的实际应用。

2. 案例一:学生管理系统学生管理系统是一个典型的Java面向对象编程案例,它常用于学校、培训机构等管理学生信息。

在这个案例中,可以定义一个Student类,包含学生的姓名、年龄、学号等属性,以及学生的增删改查等方法。

可以使用面向对象的思想,将学生信息封装到一个对象中,并使用集合类来管理多个学生对象。

3. 案例二:图形计算器图形计算器是另一个有趣的Java面向对象编程案例。

可以定义一个Shape类作为图形的基类,包含计算图形面积和周长的方法,并派生出Circle、Rectangle和Triangle等子类,分别表示圆形、长方形和三角形。

通过面向对象的继承特性,可以调用对应子类的计算方法,根据用户的输入来计算所需图形的面积和周长。

4. 案例三:银行账户管理系统银行账户管理系统是一个常见的Java面向对象编程案例,用于管理银行的账户信息。

可以定义一个Account类,包含账户的姓名、余额、存取款等方法,并通过封装特性将账户信息隐藏在对象中。

可以使用ArrayList类来存储多个账户对象,实现对账户信息的管理和操作。

5. 案例四:图书馆管理系统图书馆管理系统是另一个典型的Java面向对象编程案例,用于管理图书馆的图书信息。

可以定义一个Book类,包含图书的书名、作者、价格等属性,并封装对应的get和set方法。

可以使用HashMap类来存储图书编号和对应的图书对象,实现图书的检索和借还功能。

还可以定义一个User类表示图书馆的用户,包含用户的姓名、借书数量等属性。

6. 案例五:游戏角色管理系统游戏角色管理系统是一个有趣的Java面向对象编程案例,用于管理游戏中的角色信息。

java递归算法经典题目

java递归算法经典题目

java递归算法经典题目递归是一种常见的算法思想,它通过将问题分解为更小的子问题来解决问题。

在Java中,递归算法可以用于解决许多经典问题,如斐波那契数列、汉诺塔、阶乘等。

下面我们将介绍一些Java递归算法经典题目,帮助您更好地理解和掌握递归算法。

1.斐波那契数列斐波那契数列是一个经典的递归问题,它是指从第0项开始,每一项都是前两项的和。

在Java中,可以使用递归方法来求解斐波那契数列。

以下是一个简单的递归算法实现:```javapublicstaticintfibonacci(intn){if(n<=1){returnn;}else{returnfibonacci(n-1)+fibonacci(n-2);}}```这个算法会一直递归调用直到达到斐波那契数列的末项为止。

需要注意的是,递归算法的时间复杂度较高,当n值较大时可能会导致栈溢出等问题。

2.汉诺塔问题汉诺塔问题是一个经典的递归问题,它描述了一个操作:将一堆盘子从一个柱子移动到另一个柱子,要求遵循以下规则:每次只能移动一个盘子,并且大盘子不能放在小盘子上面。

在Java中,可以使用递归方法来解决汉诺塔问题。

以下是一个简单的递归算法实现:```javapublicstaticvoidhanoi(intn,Stringfrom,Stringto,Stringvia) {if(n==1){System.out.println("Movedisk"+n+"from"+from+"to"+to);}else{hanoi(n-1,from,via,to);System.out.println("Movedisk1from"+from+"to"+to);hanoi(n-1,via,to,from);}}```这个算法会一直递归调用,直到完成所有盘子的移动。

20个java案例

20个java案例

20个java案例以下是20个Java案例,涵盖了不同的主题和功能。

每个案例都有一个简要的描述和示例代码。

1. 计算两个数的和。

描述,编写一个程序,计算两个整数的和并输出结果。

示例代码:java.int num1 = 10;int num2 = 5;int sum = num1 + num2;System.out.println("两个数的和为," + sum);2. 判断一个数是否为偶数。

描述,编写一个程序,判断一个整数是否为偶数,并输出结果。

示例代码:java.int num = 6;if (num % 2 == 0) {。

System.out.println(num + "是偶数。

");} else {。

System.out.println(num + "不是偶数。

");}。

3. 求一个数的阶乘。

描述,编写一个程序,计算一个正整数的阶乘,并输出结果。

示例代码:java.int num = 5;int factorial = 1;for (int i = 1; i <= num; i++) {。

factorial = i;}。

System.out.println(num + "的阶乘为," + factorial);4. 判断一个字符串是否为回文字符串。

描述,编写一个程序,判断一个字符串是否为回文字符串,并输出结果。

示例代码:java.String str = "level";boolean isPalindrome = true;for (int i = 0; i < str.length() / 2; i++) {。

if (str.charAt(i) != str.charAt(str.length() 1 i)) {。

isPalindrome = false;break;}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

JA V A经典算法40例【程序1】题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?1.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....public class exp2{public static void main(String args[]){int i=0;for(i=1;i<=20;i++)System.out.println(f(i));}public static int f(int x){if(x==1 || x==2)return 1;elsereturn f(x-1)+f(x-2);}}或public class exp2{public static void main(String args[]){int i=0;math mymath = new math();for(i=1;i<=20;i++)System.out.println(mymath.f(i));}}class math{public int f(int x){if(x==1 || x==2)return 1;elsereturn f(x-1)+f(x-2);}}【程序2】题目:判断101-200之间有多少个素数,并输出所有素数。

1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。

public class exp2{public static void main(String args[]){int i=0;math mymath = new math();for(i=2;i<=200;i++)if(mymath.iszhishu(i)==true)System.out.println(i);}}class math{public boolean iszhishu(int x){for(int i=2;i<=x/2;i++)if (x % i==0 )return false;return true;}}【程序3】题目:打印出所有的"水仙花数",所谓"水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。

例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。

1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。

public class exp2{public static void main(String args[]){int i=0;math mymath = new math();for(i=100;i<=999;i++)if(mymath.shuixianhua(i)==true)System.out.println(i);}}class math{public int f(int x){if(x==1 || x==2)return 1;elsereturn f(x-1)+f(x-2);}public boolean iszhishu(int x){for(int i=2;i<=x/2;i++)if (x % 2==0 )return false;return true;}public boolean shuixianhua(int x){int i=0,j=0,k=0;i=x / 100;j=(x % 100) /10;k=x % 10;if(x==i*i*i+j*j*j+k*k*k)return true;elsereturn false;}}【程序4】题目:将一个正整数分解质因数。

例如:输入90,打印出90=2*3*3*5。

程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。

(2)如果n <> k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你,重复执行第一步。

(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

public class exp2{public exp2(){}public void fengjie(int n){for(int i=2;i<=n/2;i++){if(n%i==0){System.out.print(i+"*");fengjie(n/i);}}System.out.print(n);System.exit(0);///不能少这句,否则结果会出错}public static void main(String[] args){String str="";exp2 c=new exp2();str=javax.swing.JOptionPane.showInputDialog("请输入N的值(输入exit退出):");int N;N=0;try{N=Integer.parseInt(str);}catch(NumberFormatException e){e.printStackTrace();}System.out.print(N+"分解质因数:"+N+"=");c.fengjie(N);}}【程序5】题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

1.程序分析:(a> b)?a:b这是条件运算符的基本例子。

import javax.swing.*;public class ex5 {public static void main(String[] args){String str="";str=JOptionPane.showInputDialog("请输入N的值(输入exit退出):");int N;N=0;try{N=Integer.parseInt(str);}catch(NumberFormatException e){e.printStackTrace();}str=(N>90?"A":(N>60?"B":"C"));System.out.println(str);}}【程序6】题目:输入两个正整数m和n,求其最大公约数和最小公倍数。

1.程序分析:利用辗除法。

最大公约数:public class CommonDivisor{public static void main(String args[]){commonDivisor(24,32);}static int commonDivisor(int M, int N){if(N<0||M<0){System.out.println("ERROR!");return -1;}if(N==0){System.out.println("the biggest common divisor is :"+M);return M;}return commonDivisor(N,M%N);}}最小公倍数和最大公约数:import java.util.Scanner;public class CandC{//下面的方法是求出最大公约数public static int gcd(int m, int n){while (true){if ((m = m % n) == 0)return n;if ((n = n % m) == 0)return m;}}public static void main(String args[]) throws Exception{//取得输入值//Scanner chin = new Scanner(System.in);//int a = chin.nextInt(), b = chin.nextInt();int a=23; int b=32;int c = gcd(a, b);System.out.println("最小公倍数:" + a * b / c + "\n最大公约数:" + c); }}【程序7】题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

1.程序分析:利用while语句,条件为输入的字符不为'\n '.import java.util.Scanner;public class ex7 {public static void main(String args[]){System.out.println("请输入字符串:");Scanner scan=new Scanner(System.in);String str=scan.next();String E1="[\u4e00-\u9fa5]";String E2="[a-zA-Z]";int countH=0;int countE=0;char[] arrChar=str.toCharArray();String[] arrStr=new String[arrChar.length];for (int i=0;i<arrChar.length ;i++ ){arrStr[i]=String.valueOf(arrChar[i]);}for (String i: arrStr ){if (i.matches(E1)){countH++;}if (i.matches(E2)){countE++;}}System.out.println("汉字的个数"+countH);System.out.println("字母的个数"+countE);}}【程序8】题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。

例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

1.程序分析:关键是计算出每一项的值。

import java.io.*;public class Sumloop {public static void main(String[] args) throws IOException{int s=0;String output="";BufferedReader stadin = new BufferedReader(new InputStreamReader(System.in));System.out.println("请输入a的值");String input =stadin.readLine();for(int i =1;i<=Integer.parseInt(input);i++){output+=input;int a=Integer.parseInt(output);s+=a;}System.out.println(s);}}另解:import java.io.*;public class Sumloop {public static void main(String[] args) throws IOException{int s=0;int n;int t=0;BufferedReader stadin = new BufferedReader(new InputStreamReader(System.in));String input = stadin.readLine();n=Integer.parseInt(input);for(int i=1;i<=n;i++){t=t*10+n;s=s+t;System.out.println(t);}System.out.println(s);}}【程序9】题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。

相关文档
最新文档