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] 题目:古典问题:有一对兔子, ...
随机推荐
- vim编辑文件警告Swap file already exists ,如何删除vim编辑产生的.swp文件?查看隐藏文件命令
vim编辑文件警告Swap file already exists,如何删除vim编辑产生的.swp文件?查看隐藏文件命令 Linux(centos7)下多个用户同时编辑一个文件,或编辑时非正常关闭, ...
- Music life
some songs: you are you are <<你眼中的世界> Trouble I'm In > 1:40 secs 忧桑钢琴曲 < 豆花之歌 The Tru ...
- linux mysql主从复制
centos7 安装 mariadb 1 yum 源 -- 配置阿里的 2 rmp 方式 3 源码编译方式 -- 专业DBA 一些知识点: 虚拟环境 不影响 redis/ mariadb/mysq ...
- vue:自定义指令
<div id="app"> <div v-lang="color">{{num}}</div> <button @c ...
- win10 校园宽带连接不上的解决办法(错误720、“以太网”没有有效的ip设置)
遇到的问题如下图所示: 插上宽带后,查看以太网状态显示如下: 创建新连接宽带(PPPoE)(R)后,连接失败,错误为720,显示如下: 以太网网络诊断后,结果显示“以太网”没有有效的Ip设置,如下图所 ...
- jmeter压力测试及抓包
如何使用jmeter进行分布式压力测试? 1.其他的压力机启动jmeter-server 2.在主控机jmeter的配置文件jmeter.properties里面找到,remote_hosts=xx, ...
- 在idea中不出现大波浪的设置
在idea中如果有重复代码时候,就会出现大波浪 ,然后,现在可以设置 Duplicated Code 的对号去掉就可以没有大波浪
- mycat实现mysql数据库的垂直切分
在我们的工作中可能会遇到数据库的io瓶颈. 这个时候我们应该怎么办呢? 解决办法有很多,我们可以想到的为:数据库集群,主从复制,读写分离,数据库负载均衡,数据库的分库,分表.接下来我们写一下,数据库的 ...
- Java泛型中的标记符
E - Element (在集合中使用,因为集合中存放的是元素) T - Type(Java 类) K - Key(键) V - Value(值) N - Number(数值类型) ? - 表示不确 ...
- charles最新破解jar文件,及浏览器证书安装
一 在线破解文件下载 Charles 在线破解工具,https://www.zzzmode.com/mytools/charles/ 描述 此工具用于生成破解后的charles.jar文件, 破解原 ...