首页 > 编程语言 > 详细

Java-每日编程练习题②(数组练习)

时间:2019-04-25 20:20:05      阅读:103      评论:0      收藏:0      [点我收藏+]

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 Test30 {
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 Test29 {
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 }

 

Java-每日编程练习题②(数组练习)

原文:https://www.cnblogs.com/czxoy/p/10770567.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!