您的位置:首页 > 编程语言 > Java开发

JAVA之经典算法二

2017-11-27 12:25 369 查看
程序1:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

public class Demo6 {
public static void main(String args[]){
double s = 0;
double h = 100;
for (int i = 1; i <= 10; i++) {
s += h;
h = h/2;
s += h;
}
System.out.println("经过路程:"+s);
System.out.println("反弹高度:"+h);
}
}

调试结果:
经过路程:299.70703125
反弹高度:0.09765625


程序2:求s = a + aa + aaa + aaaa + aa…a的值,其中a是一个数字。

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

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

public class Demo7 {
public static void main(String args[]){
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);
}
}

调试结果:
请输入a的值
2
请输入n个数
3
246


程序3:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

1.程序分析:利用for循环语句,if条件语句。

public class Demo8 {
public static void main(String args[]) {
System.out.println("请输入一个字符串;");
Scanner in = new Scanner(System.in);
String str = in.nextLine();
char[] ch = str.toCharArray();
count use = new count();
use.count(ch);
}

static class count {
int digital, character, blank, other;

public void count(char[] arr) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] >= '0' && arr[i] <= '9') {
digital++;
} else if ((arr[i] >= 'a' && arr[i] <= 'z') || (arr[i] >= 'A' && arr[i] <= 'Z')) {
character++;
} else if (arr[i] == ' ') {
blank++;
} else {
other++;
}
}
System.out.println("数字个数:" + digital);
System.out.println("英文字母个数:" + character);
System.out.println("空格个数:" + blank);
System.out.println("其他字符个数:" + other);
}
}

}

调试结果:
请输入一个字符串;
fhaln k#L@24% *(JI-)
数字个数:2
英文字母个数:9
空格个数:2
其他字符个数:7


程序4:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,

又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

1.程序分析:采取逆向思维的方法,从后往前推断。

public class Demo9 {
public static void main(String args[]){
int sum = 1;
for (int i = 0; i < 9; i++) {
sum = (sum + 1) * 2;
}
System.out.println("第一天共摘"+sum);
}
}

调试结果:
第一天共摘1534


程序5:打印出如下图案(菱形)

1.程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列。

菱形:
*
***
*****
*******
*****
***
*

public class Demo10 {
public static void main(String args[]){
int i = 0;
int j = 0;
for (i = 1; i <= 4; i++) {
for (int k = 1; k <= 4 - i; k++)
System.out.print( " " );
for (j = 1; j <= 2 * i - 1; j++)
System.out.print("*");
System.out.println();
}
for (i = 3; i >= 1; i--) {
for (int k = 1; k <= 4 - i; k++)
System.out.print( " " );
for (j = 1; j <= 2 * i - 1; j++)
System.out.print("*");
System.out.println();
}

}
}

调试结果:
*
***
*****
*******
*****
***
*


三角形:

*
***
******
********
******
***
*
public class Demo10 {
public static void main(String[] args) {
int i=0;
int j=0;
for ( i = 1; i <= 4; i++) {
for ( j = 1; j <= 2 * i - 1; j++)
System.out.print("*");
System.out.println();
}
for ( i = 3; i >= 1; i--) {
for ( j = 1; j <= 2 * i - 1; j++)
System.out.print("*");
System.out.println();
}
}
}

调试结果:
*
***
******
********
******
***
*
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 算法