数组的常见算法题(1)
一、数值型数组特征值统计
案例1:特征值计算
定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,然后求出所有元素的最大值,最小值,总和,平均值,并输出出来。
要求:所有随机数都是两位数:[10,99]
提示:求[a , b]范围内的随机数:(int)(Math.random() * (b - a + 1)) + a;
代码实现:
输出结果:
案例2:特征值计算
分析以下代码。并用代码实现:
(1)在编程竞赛中,有10位评委为参赛的选手打分,分数分别为:5,4,6,8,9,0,1,2,7,3
(2)求选手的最后得分(去掉一个最高分和一个最低分后其余8位评委打分的平均值)
代码实现:
输出结果:
二、数组元素的赋值(常使用)
案例1:杨辉三角打印
要求:使用二维数组打印一个10行杨辉三角
提示:
1.第一行有1个元素,第n行有n个元素
2.每一行的第一个元素和最后一个元素都是1
3.从第三行开始,对于非第一个元素和最后一个元素的元素。即:yanghui[ i ][ j ] = yanghui[ i-1 ][ j-1 ] + yanghui[ i-1 ][ j ];
代码实现:
输出结果:
案例2:回型数(难)
要求:从键盘输入一个整数(1~20),则以该数字为矩阵的大小,把1,2,3…n*n的数字按照顺时针螺旋的形式填入其中。
举例1:输入数字3
1 2 3
8 9 4
7 6 5
举例2:输入数字2
1 2
4 3
代码实现:
在这里插入代码片
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入一个整数:");
int len = scan.nextInt();
int[][] arr = new int[len][len];
int s = len*len;
int i = 0;
int j = 0;
int k = 1;
for (int m = 1; m <= s ; m++) {
if (k == 1){
if (j < len && arr[i][j] == 0)
arr[i][j++] = m ;
else {
k=2;
i++;
j--;
m--;
}
}else
if (k == 2){
if (i < len && arr[i][j] == 0){
arr[i++][j] = m;
}else {
k=3;
i--;
j--;
m--;
}
}else
if (k == 3){
if (j >= 0 && arr[i][j] == 0){
arr[i][j--] = m;
}else {
k=4;
i--;
j++;
m--;
}
}else
if (k == 4){
if (i >= 0 && arr[i][j] == 0){
arr[i--][j] = m;
}else {
k=1;
i++;
j++;
m--;
}
}
}
for (int l = 0; l < len; l++) {
for (int m = 0; m < len; m++) {
System.out.print(arr[l][m]+"\t");
}
System.out.println();
}
scan.close();
}
}
![回形数](https://img-blog.csdnimg.cn/b7ae71d0c46c4da48aec87e4e1fbd927.png
输出结果:
三、元素反转
案例1:
定义数组: int[ ] arr = new int[]{34,54,3,2,65,7,34,5,76,34,67};如何实现数组元素的反转存储?你有几种方法。
代码实现1:
public class Demo {
public static void main(String[] args) {
/*定义数组: int[ ] arr = new int[]{34,54,3,2,65,7,34,5,76,34,67};
如何实现数组元素的反转存储?你有几种方法。*/
int[] arr = new int[]{34,54,3,2,65,7,34,5,76,34,67};
int tmp = 0;
// 元素反转
for (int j = 0; j < arr.length/2; j++) {
tmp = arr[(arr.length-1)-j];
arr[(arr.length-1)-j] = arr[j];
arr[j]= tmp;
}
//遍历数组
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+"\t");
}
}
}
输出结果:
代码实现2:双指针
public class Demo {
public static void main(String[] args) {
//定义数组: int[ ] arr = new int[]{34,54,3,2,65,7,34,5,76,34,67};如何实现数组元素的反转存储?你有几种方法。
int[] arr = new int[]{34,54,3,2,65,7,34,5,76,34,67};
int tmp = 0;
// 元素反转
for (int i=0,j = arr.length-1; i < j; i++,j--) {
tmp = arr[i];
arr[i]= arr[j];
arr[j]= tmp;
}
//遍历数组
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+"\t");
}
}
}
输出结果: