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之经典算法的更多相关文章

  1. java经典算法40题-附带解决代码

    前一段时间工作比较闲,每天没有代码敲的日子有点无聊,于是为了保证自己的编程逻辑力的日常清醒,故百度了一些经典的java算法,然后自己思考编程解决问题,虽然那些东西比较基础了,但是有些题目小编看到了也是 ...

  2. Java中的经典算法之冒泡排序(Bubble Sort)

    Java中的经典算法之冒泡排序(Bubble Sort) 神话丿小王子的博客主页 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一 ...

  3. Java中的经典算法之选择排序(SelectionSort)

    Java中的经典算法之选择排序(SelectionSort) 神话丿小王子的博客主页 a) 原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕.也就是:每一趟 ...

  4. JAVA经典算法40题及解答

    JAVA经典算法40题 [程序1]   题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分 ...

  5. Java经典算法四十例编程详解+程序实例

    JAVA经典算法40例 [程序1]   题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?   1.程 ...

  6. JAVA经典算法40题

    1: JAVA经典算法40题 2: [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 3 ...

  7. JAVA经典算法40题(原题+分析)之分析

    JAVA经典算法40题(下) [程序1]   有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?   1.程序分析:  ...

  8. JAVA经典算法40题(原题+分析)之原题

    JAVA经典算法40题(上) [程序1]   题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? [程 ...

  9. JAVA经典算法50题(转)

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/51097928 JAVA经典算法50题 [程序1]   题目:古典问题:有一对兔子, ...

随机推荐

  1. Andriod post Api与返回值

    vs后台api控制器  post接收参数----HttpContext.Current.Request.Params["account"].ToString() 返回值为对象返回, ...

  2. 模型(model-->orm)系统

    一.ORM介绍 1)ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过 ...

  3. 论文翻译——Rapid 2D-to-3D conversion——快速2D到3D转换

    https://blog.csdn.net/qq_33445835/article/details/80143598  目前想做一个关于2D转3D的项目,由于国内资料比较少而且大部分都是基于国外的研究 ...

  4. ES6知识整理(3)--函数的扩展

    只有整理过的学习才是有效的学习.也就是学习之后要使用和整理成文,才是真正的学到了... 最近上班有点忙的关系,于是文章更新会慢些.只有晚上加完班之后,空余时间才能学习整理.因此完成一篇也可能要几个晚上 ...

  5. postman5.0.2_0+postmanInterceptor0.2.22_0下载安装,可发送header头 cookie 参数

    Postman是chrome上一个非常好用的http客户端插件,可惜由于chrome安全的限制,发不出带cookie的请求.如果想要发送带cookie的请求,需要开启Interceptor 安装方法: ...

  6. css显示display、可见性visibility、定位position、对齐

    隐藏一个元素可以通过把display属性设置为"none",或把visibility属性设置为"hidden",但是这两种方法会产生不同的结果. display ...

  7. 写给大忙人的CentOS 7下最新版(6.2.4)ELK+Filebeat+Log4j日志集成环境搭建完整指南

    现在的公司由于绝大部分项目都采用分布式架构,很早就采用ELK了,只不过最近因为额外的工作需要,仔细的研究了分布式系统中,怎么样的日志规范和架构才是合理和能够有效提高问题排查效率的.经过仔细的分析和研究 ...

  8. 不接入微信sdk,在APP中实现微信分享,支付

    前段时间在很多地方接入了微信的sdk,发现过程比较繁琐,此外因为导入的sdk比较大会影响最终APP打包的体积,所以就有了不接入sdk也实现相同的功能的想法. 要实现这个目标我个人认为最困难的地方是不知 ...

  9. 实现定时器定时 1 秒钟,LED 亮灭显示

    实现定时器定时 1 秒钟,LED 亮灭显示 要求 每隔一秒钟,实现LED灯的显隐转换 实验代码 /*************************************************** ...

  10. html5-表单属性及<!DOCTYPE> 标签

    <!DOCTYPE> 标签定义和用法<!DOCTYPE> 声明必须位于HTML 5 文档中的第一行,也就是位于<html> 标签之前.该标签告知浏览器文档所使用的H ...