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] 题目:古典问题:有一对兔子, ...
随机推荐
- linux 3
-- Linux -- 开心的一天 vi 所有的 unix like 系统都会内置 vi 文本编辑器 vim 较多使用的,可以主动的以字体颜色辨别语法的正确性,方便程序设计 vi/vim 的使用 ...
- Java 多线程并发编程面试笔录一览
知识体系图: 1.线程是什么? 线程是进程中独立运行的子任务. 2.创建线程的方式 方式一:将类声明为 Thread 的子类.该子类应重写 Thread 类的 run 方法 方式二:声明实现 Runn ...
- HTML5 canvas游戏工作原理
HTML5已经不是一个新名词.它看上去很cool,有很多feature,大多数人普遍看好它的发展.对于我来说,最感兴趣的是它的canvas标签,可以结合Javascript来绘制游戏画面. 我们可以在 ...
- percona-server-5.7.18-14安装
说明 percona-server-5.7 的安装对硬件配置的要求较高,至少需要4G内存或者2G物理内存+2Gswap. 编译安装过程中注意所在分区的空间大小,编译安装需要使用到大量的临时空间. 环境 ...
- PHP 图片缩放类
<?php /** * 图片压缩类:通过缩放来压缩. * 如果要保持源图比例,把参数$percent保持为1即可. * 即使原比例压缩,也可大幅度缩小.数码相机4M图片.也可以缩为700KB左右 ...
- ElasticSearch vs Solr多维度分析对比
福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号: 大数据躺过的坑 Java从入门到架构师 人工智能躺过的坑 Java全栈大联盟 ...
- linux系统日常维护常用命令
环境: OS:Red Hat Linux As 5 1.find 11.查找当前目录以及子目录下包含ORA字符的文件 find . -type f|xargs grep "ORA&qu ...
- Java开发人员必会的基本Linux命令(转)
原文链接:http://www.cnblogs.com/zhuawang/p/5212809.html http://explainshell.com/ 本文并不会对所有命令进行详细讲解,只给出常见用 ...
- 【4OpenCV】OpenCV和RTSP的综合研究
一.RTSP是什么?用来干什么? RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学.网景和 ...
- linux tmux 工具使用 tmux.conf 文件
set -g prefix ^a unbind ^b bind a send-prefix unbind '"' bind - splitw -v unbind % bind \ split ...