杨辉三角形和数组练习

时间:2023-02-20 17:18:57

1. 杨辉三角形

1.1 使用二维数组打印一个 10 行杨辉三角

杨辉三角形和数组练习

public class Test22
{
public static void main(String[] args)
{
int yanghui[][]=new int[10][];
for(int i=0;i<yanghui.length;i++)//遍历yanghui 的每个元素
{
yanghui[i]=new int[i+1];//给每个一维数组开辟空间
for(int j=0;j<yanghui[i].length;j++)//个每个一维数组赋值
{
if(j==0||j==yanghui[i].length-1)//给第一个和最后一个赋值
{
yanghui[i][j]=1;
}
else
{
yanghui[i][j]=yanghui[i-1][j]+yanghui[i-1][j-1];//给中间元素赋值
}
}
}
//打印
for(int i=0;i<yanghui.length;i++)
{
for(int j=0;j<yanghui[i].length;j++)
{
System.out.print(yanghui[i][j]+"\t");
}
System.out.println();
}
}
}

2. 二维数组的使用细节和注意事项 182

1) 一维数组的声明方式有:

int[] x 或者 int x[]

2) 二维数组的声明方式有:

int[][] y 或者 int[] y[] 或者 int y[][]

3) 二维数组实际上是由多个一维数组组成的,它的各个一维数组的长度可以相同,也可以不相同。比如: map[][] 是 一个二维数组

int map [][] = {{1,2},{3,4,5}}

由 map[0] 是一个含有两个元素的一维数组 ,map[1] 是一个含有三个元素的一维数组构成,我们也称为列数不等

的二维数组

3. 二维数组课堂练习 183

杨辉三角形和数组练习

4. 数组相关练习 184

4.1 选择题


杨辉三角形和数组练习

4.2 判断输出

输出blue

public class Test22
{
public static void main(String[] args)
{
String foo = "blue";
boolean[] bar=new boolean[2];//bar[0]默认为0,bar[1]也默认为0
if(bar[0])
{
foo="green";
}
System.out.println(foo);
}
}

4.3 判断输出

输出1 3 5 7

public class Test22
{
public static void main(String[] args)
{
int num=1;
while(num<10)
{
System.out.println(num);
if(num>5)
{
break;
}
num+=2;
}
}
}

4.4 已知有个升序的数组,要求插入一个元素,该数组顺序依然升序,比如[10,12,45,90],添加23后,数组为[10,12,23,45,90]

//方法1
//思路先扩容添加数据,再排序
import java.util.Scanner;
public class Test22
{
public static void main(String[] args)
{
Scanner myScanner=new Scanner(System.in);
int arr[]= {10,12,45,90};
//扩容
int arrnew[]=new int[arr.length+1];//扩容
for(int i=0;i<arr.length;i++)
{
arrnew[i]=arr[i];
}
System.out.println("请添加元素");
int addnum=myScanner.nextInt();
arrnew[arrnew.length-1]=addnum;//添加元素
arr=arrnew;//将arr指向arrNew
//排序
for(int i=0;i<arr.length-1;i++)
{
for(int j=0;j<arr.length-1-i;j++)
{
if(arr[j]>arr[j+1])
{
int tmp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=tmp;
}
}
}
for(int i=0;i<arr.length;i++)//输出
{
System.out.print(arr[i]+" ");
}
}
}

5.例1 186

5.1 已知有个升序的数组,要求插入一个元素,该数组顺序依然升序,比如[10,12,45,90],添加23后,数组为[10,12,23,45,90]

//方法2
//思路:
//1.先找到插入下标
//2.扩容将数据插入
import java.util.Scanner;
public class Test23
{
public static void main(String[] args)
{
int arr[] = {10,12,45,90};

Scanner myScanner=new Scanner(System.in);//键盘输入
System.out.println("请输入要插入的数据");
int addNum = myScanner.nextInt();
int index = -1;//保存即将插入数据的下标
//1.先找到插入下标
//分为两种情况:
//1. addNum<数组中的arr[i],将i的下标存入index
//2. addNum>数组中的任何元素,将addNum放入最后的一个位置arr[arr.length]
for(int i=0;i<arr.length;i++)//遍历arr数组
{
if(addNum<=arr[i])
{
index = i;//当index小于arr[i]时,将i的下标存入index
break;//找到位置后退出
}
}
//2. addNum>数组中的任何元素,将addNum放入最后的一个位置arr[arr.length]
if(index==-1)
{
index=arr.length;
}
//2.扩容将数据插入
int arrNew[] = new int[arr.length+1];//扩容:定义新的数组
for(int i=0,j=0;i<arrNew.length;i++)//i指向arrNew,j指向arr
{
if(i!=index)//跳过插入数据的下标
{
arrNew[i]=arr[j];
j++;
}
else//将数据插入
{
arrNew[index]=addNum;
}
}
arr=arrNew;//将arr指向arrNew
//输出
for(int i=0;i<arr.length;i++)
{
System.out.print(arr[i]+" ");
}
}
}

6. 例2 187

6.1 随机生成10个整数(1-100范围)保存到数组,并倒叙打以及求平均值最大值和最大值下标,并查找里面是否有8

public class Test23
{
public static void main(String[] args)
{
int arr[]=new int[10];
for(int i=0;i<arr.length;i++)//给数组赋值
{
//(int)(Math.rand()*10)+1生成1-100的随机数
arr[i]=(int)(Math.random()*100)+1;
}
System.out.println("======正序输出======");
for(int i=0;i<arr.length;i++)//正序输出
{
System.out.print(arr[i]+" ");
}
System.out.println("\n======倒序输出======");
for(int i=arr.length-1;i>=0;i--)
{
System.out.print(arr[i]+" ");
}

//平均值最大值和最大值下标
double sum = arr[0];//将sum初始值为数组第一个元素方便计算平均值(因为再找出最大数时是从第二个数开始的)
int max = arr[0];//假设第一个数时最大值
int maxIndex = 0;
for(int i=1;i<arr.length;i++)//遍历数组
{
sum+=arr[i];//求和
if(max<arr[i])
{
max=arr[i];
maxIndex=i;//将最大值下标赋给maxIndex
}
}
System.out.println("\nmax="+max+" maxIndex="+maxIndex);
System.out.println("\n平均值="+(sum/arr.length));

//查找数组中是否有8
int findNum = 8;
int index = -1;
for(int i=0;i<arr.length;i++)//遍历找
{
if(findNum==arr[i])
{
System.out.println("找到啦"+findNum+"下标是"+i);
index = i;
break;
}
}
if(index==-1)//没找到
{
System.out.println("没找到"+findNum);
}
}
}

7. 例3 188

7.1 判断输出

public class Test23
{
public static void main(String[] args)
{
char[] arr1 = {'a','z','b','c'};
char[] arr2=arr1;
arr1[2]='韩';
for(int i=0;i<arr2.length;i++)
{
System.out.println(arr1[i]+","+arr2[i]);
}
}
}

8. 例4 188

8.1 冒泡排序 从大往小排

//冒泡排序  从大往小排
public class Test23
{
public static void main(String[] args)
{
int arr[] ={9,8,2,7,6,7,25,41,-1};
for(int i=0;i<arr.length-1;i++)//趟数
{
for(int j=0;j<arr.length-1-i;j++)//交换几次
{
if(arr[j]<arr[j+1])
{
int tmp =arr[j];
arr[j]=arr[j+1];
arr[j+1]=tmp;
}
}
}
for(int i=0;i<arr.length;i++)
{
System.out.print(arr[i]+" ");
}
}
}