Java-每日编程练习题②(数组练习)
程序员文章站
2022-03-25 19:06:06
每日编程练习第二天(主要为数组方面的练习) 坚持就是胜利! ......
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 }
推荐阅读
-
Java循环和数组练习题:打印素数升级版
-
【图文+视频新手也友好】Java一维数组详细讲解(内含练习题答案+详解彩蛋喔~)
-
Java 数组练习题:随机生成10个整数,并添加到一个数组中,数组不允许添加重复的数字【多测师_何sir】
-
python练习题---给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
-
java编程思想练习题-第5章练习8-this实现细节详解
-
练习题008:交换两个数组中的元素
-
Java练习题五【数组】
-
【视频+图文新手也友好】二维数组详解+例题(内含练习题彩蛋喔~)
-
Java零基础学习 Java基础编程练习题
-
第六章第二十一题(电话按键盘)(Phone keypads) - 编程练习题答案