斐波拉契數列、氣泡排序、轉置矩陣、楊輝三角、陣列反轉(Java語言描述)
阿新 • • 發佈:2021-11-30
一、斐波拉契數列
public class Fibonacci {
public static void main(String[] args) {
int n,i;
java.util.Scanner in = new java.util.Scanner(System.in);
n = in.nextInt(); //由使用者決定列印 n 個數
while(n<0) n = in.nextInt(); //n不能為負數
int[] arr = new int[n];
if(n>2){
arr[0] = arr[1] = 1; //前兩位是1
for(i=2;i<n;i++)
arr[i] = arr[i-2] + arr[i-1]; //當前的數為前兩個數之和
}
else if(n == 1) arr[0] = 1;
else if(n == 2) arr[0] = arr[1] = 1;
for(i=0;i<n;i++) {
if(i%5==0) //五個數換一行
System.out.println();
System.out.print(arr[i] + "\t");
}
}
}
輸入:
10
輸出:
1 1 2 3 5 8 13 21 34 55
二、氣泡排序
很經典的排序了,這張圖很形象:
(圖片來自
程式碼如下:
public class BubbleSort {
public static void main(String[] args) {
int[] a = {9,8,7,6,5,4,3,2,1,0};
int i,j;
//n個數字只用比較n-1輪
for(i=0;i<9;i++) {
//每比較一輪就有一個數字排好了,所以只用比較9-i次
for(j=0;j<9-i;j++) {
if(a[j] > a[j+1]) {
//交換值
int t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
//輸出
for(i=0;i<10;i++)
System.out.println(a[i]);
}
}
輸出:
0 1 2 3 4 5 6 7 8 9
三、轉置矩陣
a[0][0] | a[0][1] | a[0][2] |
---|---|---|
1 | 2 | 3 |
a[1][0] | a[1][1] | a[1][2] |
4 | 5 | 6 |
a[2][0] | a[2][1] | a[2][2] |
7 | 8 | 9 |
把正對角線的兩邊的值交換後
a[0][0] | a[0][1] | a[0][2] |
---|---|---|
1 | 4 | 7 |
a[1][0] | a[1][1] | a[1][2] |
2 | 5 | 8 |
a[2][0] | a[2][1] | a[2][2] |
3 | 6 | 9 |
程式碼如下:
public class Transpose2 {
public static void main(String[] args) {
java.util.Scanner in = new java.util.Scanner(System.in);
int[][] a = new int[3][3]; //假如有一個3*3的矩陣
int i,j; //分別控制行和列
for(i=0;i<3;i++) {
for(j=0;j<3;j++) {
a[i][j] = in.nextInt();
}
}
//轉置
for(i=0;i<3;i++) {
for(j=0;j<3;j++) {
//將對角線兩邊值交換
if(j>i) {
int t = a[i][j];
a[i][j] = a[j][i];
a[j][i] = t;
}
}
}
//輸出看效果
for(i=0;i<3;i++) {
for(j=0;j<3;j++)
System.out.print(a[i][j] + " ");
System.out.println();
}
}
}
輸入:
1 2 3 4 5 6 7 8 9
輸出:
1 4 7 2 5 8 3 6 9
還有一種方法,更簡單,但空間複雜度高一些,時間和空間不能兼得嘛。
建立一個新的陣列接受轉置後的陣列。
程式碼如下:
public class Transpose {
public static void main(String[] args) {
java.util.Scanner in = new java.util.Scanner(System.in);
int[][] a = new int[3][3]; //假如有一個3*3的矩陣
int[][] b = new int[3][3]; //存放轉置後的矩陣
int i,j; //分別控制行和列
for(i=0;i<3;i++) {
for(j=0;j<3;j++) {
a[i][j] = in.nextInt();
}
}
//轉置
for(i=0;i<3;i++) {
for(j=0;j<3;j++) {
b[i][j] = a[j][i];
}
}
//輸出看效果
for(i=0;i<3;i++) {
for(j=0;j<3;j++)
System.out.print(b[i][j] + " ");
System.out.println();
}
}
}
輸入:
1 2 3 4 5 6 7 8 9
輸出:
1 4 7 2 5 8 3 6 9
四、楊輝三角
簡易版的楊輝三角
程式碼如下:
public class YangHui {
public static void main(String[] args) {
int[][] a = new int[10][10]; //列印十行
int i,j;
for(i=0;i<10;i++) {
//初始化兩腰為 1
a[i][0] = 1;
a[i][i] = 1;
for(j=1;j<i;j++) {
a[i][j] = a[i-1][j-1] + a[i-1][j];
}
}
for(i=0;i<10;i++) {
for(j=0;j<=i;j++) {
System.out.printf("%-4d ",a[i][j]);
}
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
五、陣列反轉
兩種方法
-
以陣列中心為軸翻轉:
public class Turn {
public static void main(String[] args) {
int[] a = {0,1,2,3,4,5,6,7,8,9};
int i;
for(i=0;i<a.length/2;i++) {
int t = a[i];
a[i] = a[9-i];
a[9-i] = t;
}
for(i=0;i<a.length;i++)
System.out.print(a[i] + " ");
}
}
輸出:
9 8 7 6 5 4 3 2 1 0
-
利用新陣列(和轉置矩陣那裡一樣):
public class Turn2 {
public static void main(String[] args) {
int[] a = {0,1,2,3,4,5,6,7,8,9};
int[] b = new int[a.length];
int i;
for(i=0;i<a.length;i++) {
b[i] = a[a.length-1-i];//陣列下標從0開始,小心越界
}
for(i=0;i<b.length;i++)
System.out.print(b[i] + " ");
}
}
輸出: