JAVA之經典演算法三
阿新 • • 發佈:2019-02-17
程式1:有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13…求出這個數列的前20項之和。
1.程式分析:請抓住分子與分母的變化規律。
public class Demo11 {
public static void main(String args[]){
float fm = 1.0f;
float fz = 1.0f;
float temp;
float sum = 0f;
for (int i = 0; i < 20; i++) {
temp = fm;
fm = fz;
fz = fz + temp;
System.out .println((int) fz + "/" + (int) fm);
sum += fz / fm;
}
System.out.println(sum);
}
}
除錯結果:
2/1
3/2
5/3
8/5
13/8
21/13
34/21
55/34
89/55
144/89
233/144
377/233
610/377
987/610
1597/987
2584/1597
4181/2584
6765/4181
10946/6765
17711/10946
32.660263
程式2:求1+2!+3!+…+20!的和。
1.程式分析:此程式只是把累加變成了累乘。
public class Demo12 {
public static void main(String args[]){
long sum = 0;
long fac = 1;
for (int i = 1; i <= 20; i++) {
fac = fac * i;
sum += fac;
}
System.out.println(sum);
}
}
除錯結果:
2561327494111820313
程式3:利用遞迴方法求5!。
1.程式分析:遞迴公式:f(n)=f(n-1)*4!
public class Demo13 {
public static void main(String args[]){
System.out.println("請輸入一個數:");
Scanner in = new Scanner(System.in);
int n = in.nextInt();
System.out.println(n + "的階乘為:" + fac(n));
}
public static long fac(int n) {
long value = 0;
if (n == 1 || n == 0) {
value = 1;
} else if (n > 1) {
value = n * fac(n - 1);
}
return value;
}
}
除錯結果:
請輸入一個數:
5
5的階乘為:120
程式4:打印出楊輝三角形(要求打印出10行如下圖)
1.程式分析:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
public class Demo14 {
public static void main(String args[]) {
int i, j;
int a[][];
int n = 10;
a = new int[n][n];
for (i = 0; i < n; i++) {
a[i][i] = 1;
a[i][0] = 1;
}
for (i = 2; i < n; i++) {
for (j = 1; j <= i - 1; j++) {
a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
}
}
for (i = 0; i < n; i++) {
for (j = 0; j <= i; j++) {
System.out.printf(a[i][j] + "\t");
}
System.out.println();
}
}
}
除錯結果:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1