JAVA之经典算法
package Set.Java.algorithm;
import java.util.Scanner;
public class algorithm {
/**
* 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
* 1.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....
**/
public static void getRabbitValue() {
Scanner in = new Scanner( System.in );
System.out.print( "斐波那契,输入第N位数:" );
int N = in.nextInt();
System.out.print( "斐波那契算法:" + algorithm.getRabbit( N ) + "\n" );
}
public static int getRabbit(int n) {
if (n == 1) {
return 1;
} else if (n == 2) {
return 1;
} else {
return getRabbit( n - 1 ) + getRabbit( n - 2 );
}
}
/**
* 【程序2】 题目:判断101-200之间有多少个素数,并输出所有素数。
* 1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
*/
public static void getPrime() {
for ( int i = 2; i <= 200; i++ ) {
boolean flag = true;
for ( int j = 2; j < i; j++ ) {
if (i % j == 0) {
flag = false;
break;
}
}
if (flag == true) {
System.out.println( "素数:" + i );
}
}
}
/**
* 【程序3】 题目:打印出所有的 水仙花数 ,所谓 水仙花数 是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 水仙花数 ,因为153=1的三次方+5的三次方+3的三次方。
* 1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
*/
public static void getNarcissus() {
for ( int i = 100; i <= 999; i++ ) {
if (algorithm.getNarcissusValue( i ) == true) {
System.out.println( "水仙花数算法:" + i );
}
}
}
public static boolean getNarcissusValue(int n) {
int i = 0, j = 0, k = 0;
i = n / 100;
j = (n % 100) / 10;
k = n % 10;
if (n == i * i * i + j * j * j + k * k * k) {
return true;
} else {
return false;
}
}
/**
* 【程序4】 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
* 1.程序分析:对n进行分解质因数,应先找到一个最小的质数i,然后按下述步骤完成:
* (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
* (2)如果n > i,但n能被i整除,则应打印出i的值,并用n除以i的商,作为新的正整数你,重复执行第一步。
* (3)如果n不能被i整除,则用i+1作为i的值,重复执行第一步。
*/
public static void getFenjie() {
Scanner in = new Scanner( System.in );
System.out.print( "请输入N的值:" );
int N = in.nextInt();
System.out.print( "分解质因数:" + N + "=" );
fenjie( N );
}
public static void fenjie(int n) {
for ( int i = 2; i <= n; i++ ) {
if (n % i == 0) {
System.out.print( i );
}
fenjie( n / i );
}
}
/**
* 【程序5】 题目:利用条件运算符的嵌套来完成此题:学习成绩=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
* 1.程序分析:(a>b)?a:b这是条件运算符的基本例子。
*/
public static void getConditional() {
Scanner in = new Scanner( System.in );
System.out.print( "请输入N的值:" );
int N = in.nextInt();
System.out.print( (N >= 90) ? "A" : ((N >= 60) ? "B" : "C") );
}
/**
* 【程序6】 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
* 1.程序分析:利用辗除法。
*/
public static void getMultiple() {
Scanner in = new Scanner( System.in );
System.out.print( "请输入一个正整数:" );
int a = in.nextInt();
System.out.print( "请再输入一个正整数:" );
int b = in.nextInt();
int m = new algorithm().commonDivisor( a, b );
int n = a * b / m;
System.out.print( "最大公约数:" + m );
System.out.print( "最小公倍数:" + n );
}
public int commonDivisor(int x, int y) {
if (x < y) {
int t = x;
x = y;
y = t;
}
while (y != 0) {
if (x == y) {
return x;
} else {
int k = x % y;
x = y;
y = k;
}
}
return x;
}
/**
* 【程序7】 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
* 1.程序分析:利用for循环语句,if条件语句。
*/
public static void getNumber() {
Scanner in = new Scanner( System.in );
System.out.print( "输入字符串,计算各字符个数:" );
String string = in.nextLine();
char[] chars = string.toCharArray();
algorithm.getNumberValue( chars );
}
public static void getNumberValue(char[] chars) {
int digital = 0, character = 0, blank = 0, other = 0;
for ( int i = 0; i < chars.length; i++ ) {
if (chars[i] >= '0' && chars[i] <= '9') {
digital++;
} else if ((chars[i] >= 'a' && chars[i] <= 'z') || chars[i] >= 'A' && chars[i] <= 'Z') {
character++;
} else if (chars[i] == ' ') {
blank++;
} else {
other++;
}
}
System.out.println( "数字个数:" + digital );
System.out.println( "英文字母个数:" + character );
System.out.println( "空格个数:" + blank );
System.out.println( "其他字符个数:" + other );
}
/**
* 【程序8】 题目:求s = a + aa + aaa + aaaa + aa...a的值,其中a是一个数字。例如2 + 22 + 222 + 2222 + 22222(此时共有5个数相加),几个数相加有键盘控制。
* 1.程序分析:关键是计算出每一项的值。
*/
public static void getCount() {
Scanner in = new Scanner( System.in );
System.out.println( "请输入a的值:" );
int a = in.nextInt();
System.out.println( "请输入n个数:" );
int n = in.nextInt();
int s = 0, t = 0;
for ( int i = 1; i <= n; i++ ) {
t += a;
a = a * 10;
s += t;
}
System.out.println( s );
}
/**
* 【程序9】 题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3。编程找出1000以内的所有完数。
*/
public static void getFctor() {
int n;
for ( int i = 1; i <= 10; i++ ) {
n=0;
for ( int j = 1; j < i; j++ ) {
if (i % j == 0) {
n = n + j;
}
if (n == i) {
System.out.println( i + " " );
}
}
}
}
/**
* 【程序10】 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
*/
public static void getFree(){
double s=0;
double height = 100;
for ( int i=1;i<=10;i++ ){
s+=height;
height=height/2;
s+=height;
}
System.out.println("经过路程:"+s);
System.out.println("反弹高度:"+height);
}
public static void main(String[] args) {
// System.out.print( "斐波那契算法:" + algorithm.getRabbit( 3 ) + "\n" );
// algorithm.getPrime();
// algorithm.getNarcissus();
//algorithm.getFenjie();
//algorithm.getConditional();
//algorithm.getMultiple();
//algorithm.getNumber();
//algorithm.getCount();
//algorithm.getFctor();
//algorithm.getFree();
}
}
JAVA之经典算法的更多相关文章
- java经典算法40题-附带解决代码
前一段时间工作比较闲,每天没有代码敲的日子有点无聊,于是为了保证自己的编程逻辑力的日常清醒,故百度了一些经典的java算法,然后自己思考编程解决问题,虽然那些东西比较基础了,但是有些题目小编看到了也是 ...
- Java中的经典算法之冒泡排序(Bubble Sort)
Java中的经典算法之冒泡排序(Bubble Sort) 神话丿小王子的博客主页 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一 ...
- Java中的经典算法之选择排序(SelectionSort)
Java中的经典算法之选择排序(SelectionSort) 神话丿小王子的博客主页 a) 原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕.也就是:每一趟 ...
- JAVA经典算法40题及解答
JAVA经典算法40题 [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分 ...
- Java经典算法四十例编程详解+程序实例
JAVA经典算法40例 [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程 ...
- JAVA经典算法40题
1: JAVA经典算法40题 2: [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 3 ...
- JAVA经典算法40题(原题+分析)之分析
JAVA经典算法40题(下) [程序1] 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析: ...
- JAVA经典算法40题(原题+分析)之原题
JAVA经典算法40题(上) [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? [程 ...
- JAVA经典算法50题(转)
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/51097928 JAVA经典算法50题 [程序1] 题目:古典问题:有一对兔子, ...
随机推荐
- 转:【专题十一】实现一个基于FTP协议的程序——文件上传下载器
引言: 在这个专题将为大家揭开下FTP这个协议的面纱,其实学习知识和生活中的例子都是很相通的,就拿这个专题来说,要了解FTP协议然后根据FTP协议实现一个文件下载器,就和和追MM是差不多的过程的,相信 ...
- 判断是移动端还是PC端
// 判断是移动端还是PC端 $http_user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? strtolower($_SERVER['HTTP_USE ...
- 如何在Linux中使用Firejail运行应用程序
有时您可能希望使用在不同环境中未经过良好测试的应用程序,但您必须使用它们.在这种情况下,关注系统的安全性是正常的.在Linux中可以做的一件事是在沙箱中使用应用程序. “沙盒”是在有限环境中运行应用程 ...
- Spring Boot 中使用 @ConfigurationProperties 注解
@ConfigurationProperties 主要作用:绑定 application.properties 中的属性 例如: @Configuration public class DataSou ...
- 不懂RPC实现原理怎能实现架构梦
RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC协议假定某些传输协议的存在 ...
- django后台管理--添加自定义action
管理员动作 简单来说,Django管理员的基本工作流程是“选择一个对象,然后进行更改”.这对大多数用例都很有效. 然而当你一次性要对多个对象做相同的改变,这个流程是非常的单调乏味的. 在这些情况下,D ...
- sqlalchemy学习笔记
https://segmentfault.com/a/1190000006949536
- php 腾讯云 对象存储V5版本 获取返回的上传文件的链接方法
腾讯云 对象存储V5版本 文档地址:https://github.com/tencentyun/cos-php-sdk-v5 调用简单文件上传方法: 返回数据如下 Array ( [data:prot ...
- 第一个django项目-通过命令行和pycharm两种方式
以本机环境为例,ip地址为172.20.16.148,windows平台,虚拟环境路径为d:\VirtualEnv,项目存放位置为d:\DjangoProject 命令行方式 1.进入虚拟环境创建项目 ...
- 安装python3.7和PyCharm专业版
安装python3.7 安装PyCharm专业版 1.下载地址http://www.jetbrains.com/pycharm/download/,选择windows下面的Professional,点 ...