1.有一個已經排好序的數組。現輸入一個數,要求按原來的規律將它插入數組中。
分析思路:
先通過Random類隨機創建一個數組,再調用Arrays類中的排序方法sort排好序,然后再開始實現功能。
按原來的規律插入數組,很簡單,只要找到合適的插入位置n,然后將n之前的數組元素直接復制到新數組的對應位置,n處插入輸入的數字,n之后的元素后移一格再移到新數組就完成了。
最關鍵的就是要找到合適的插入位置。而查找算法顯然二分查找為優。這里我投了個懶,直接使用Arrays類中的二分查找方法binarySearch()來查找輸入的num,若數組中存在和num一樣的數,則該方法的返回值即為該數的下標位置,那么插入位置n就是這個返回值;而如果數組中不存在num,則該方法能夠返回一個負數,num比數組第一個元素還小則為-1,此時插入位置應該為0,大於第一個元素小於第二個元素為-2,此時插入位置應為1,以此類推。。。那么顯然插入位置應該為返回值取絕對值再減一。
找到位置實現就簡單啦。具體代碼如下:
1 import java.util.Arrays; 2 import java.util.Random; 3 import java.util.Scanner; 4
5 /**
6 * 有一個已經排好序的數組。現輸入一個數,要求按原來的規律將它插入數組中。 7 * 8 * @author ChenZX 9 * 10 */
11 public class Test03 { 12
13 public static void main(String[] args) { 14 Random r = new Random(); 15 int[] arr = new int[10]; 16 for(int i=0;i<10;i++){ //隨機生成數組
17 arr[i]= r.nextInt(100); 18 } 19 System.out.println(Arrays.toString(arr)); 20 Arrays.sort(arr); //排序
21 System.out.println(Arrays.toString(arr)); 22
23 Scanner s = new Scanner(System.in); 24 System.out.println("請輸入一個數:"); 25 int num = s.nextInt(); 26 s.close(); 27 int bs =Arrays.binarySearch(arr, num); //二分查找的結果存入bs
28 int n = 0; //插入位置
29 if(bs<0){ //查找失敗,則插入位置為bs的絕對值-1
30 n = Math.abs(bs)-1; 31 }else{ //查找成功,則插入位置即bs
32 n = bs; 33 } 34 System.out.println(bs); 35
36 int[] arr2 = new int[arr.length+1]; //建立一個新數組,長度為原數組長度+1
37 for(int i=0;i<arr2.length;i++){ 38 if(i<n){ //在插入位置之前的部分直接復制就行
39 arr2[i]=arr[i]; 40 }else if(i==n){ //將輸入數字插入對應位置
41 arr2[i]=num; 42 }else{ //插入位置之后的數全部向后移動一格
43 arr2[i]=arr[i-1]; 44 } 45 } 46 System.out.println("插入數后的數組為:"); 47 System.out.println(Arrays.toString(arr2)); 48 } 49 }
2.求一個3*3矩陣對角線元素之和
分析思路:
這是一道矩陣的編程實現題。Java中矩陣一般都是通過二維數組實現的。
具體代碼如下:
1 import java.util.Random; 2
3 /**
4 * 求一個3*3矩陣對角線元素之和 5 * 6 * @author ChenZX 7 * 8 */
9 public class Test04 { 10
11 public static void main(String[] args) { 12 int sum = 0; //和
13 int[][] arr = new int[3][3]; 14 Random r = new Random(); 15 for(int i=0;i<3;i++){ //隨機生成矩陣
16 for(int j=0;j<3;j++){ 17 arr[i][j] = r.nextInt(10); //0到9
18 } 19 } 20 for(int i=0;i<3;i++){ //遍歷矩陣
21 for(int j=0;j<3;j++){ 22 System.out.print(arr[i][j]+" "); //打印矩陣元素
23 if(i==j){ //如果為對角線元素
24 sum += arr[i][j]; //求和
25 } 26 } 27 System.out.println(); //每輸出3個元素換行
28 } 29 System.out.println("此矩陣對角線的和為:"+sum); 30 } 31 }