Java数组中的二维数组、二分查找法、杨辉三角的案例
程序员文章站
2022-03-26 10:31:07
二维数组、二分查找法、杨辉三角一、代码及效果图1.二维数组案例及效果图2.二分查找法及效果图3.报数选班长及效果图4.杨辉三角及效果图总结一、代码及效果图1.二维数组案例及效果图案例:已知有3个班级各5名学员,请使用二维数组动态录入所有学员成绩,并计算各个班级的平均成绩,最好成绩和最差成绩。依次输出,平均成绩最好的班,三个班所有学员中成绩最高的分数,最差的分数。代码如下(示例):public class Work3 { public static void main(String[] ar...
二维数组、二分查找法、杨辉三角
一、代码及效果图
1.二维数组案例及效果图
案例:已知有3个班级各5名学员,请使用二维数组动态录入所有学员成绩,并计算各个班级的平均成绩,最好成绩和最差成绩。依次输出,平均成绩最好的班,三个班所有学员中成绩最高的分数,最差的分数。
代码如下(示例):
public class Work3 {
public static void main(String[] args) {
double [][] scores=new double[3][5];
double [] avg=new double[3];//平均成绩
double [] max=new double[3];//最好成绩
double [] min=new double[3];//最差成绩
Scanner sc = new Scanner(System.in);
for (int i = 0; i < scores.length; i++) {
double sum=0;
double maxInit=-1;
double minInit=1000;
for (int j = 0; j < scores[i].length; j++) {
//成绩录入
System.out.println("请输入第"+(i+1)+"个班的第"+(j+1)+"个学员的成绩:");
scores[i][j]=sc.nextDouble();
sum+=scores[i][j];//求和
//求每个班最大值
if(scores[i][j]>maxInit){
maxInit=scores[i][j];
}
//求每个班最小值
if(scores[i][j]<minInit){
minInit=scores[i][j];
}
}
avg[i]=sum/5;
max[i]=maxInit;
min[i]=minInit;
}
//求出平均成绩最好的班
double Max=avg[0];
int MaxIndex=0;
for (int i = 1; i < avg.length; i++) {
if(avg[i]>Max){
Max=avg[i];
MaxIndex=i;
}
}
System.out.println("平均成绩最好的班是"+(MaxIndex+1)+"班,分数是"+Max);
//所有学员中分数最高和最差
Arrays.sort(max);
Arrays.sort(min);
System.out.println(max[2]);
System.out.println(min[0]);
}
}
2.二分查找法及效果图
代码如下(示例):
案例:使用Arrays类升序排列数组{1,5,12,36,55,78,98},请用户输入一个要查找的数字,判断是否存在该数字,如果存在,输出它在升序后数组中的位置,不存在,输出提示信息。
public class Work4 {
public static void main(String[] args) {
int[] arr={1,5,12,36,55,78,98};
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个要查找的数字:");
int X=sc.nextInt();
fun(arr,X);
}
private static void fun(int[] arr,int X) {
int start=0,end=arr.length-1,mid=(start+end)/2;
while (start<=end){
if (X==arr[mid]){
System.out.println("找到了,下标为:"+mid);
return;
}else if (X>arr[mid]){
start=mid+1;
}else {
end=mid-1;
}
mid=(start+end)/2;
}
System.out.println("找不到");
}
}
3.报数选班长及效果图
代码如下(示例):
案例:按照一定的规则选举班长,规则如下:将班里的N个人围城一圈,顺序编号,从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,然后从下一个人重新开始,最后留下的那个人就被选为班长,请问按照这个规则,选出的班长是原来编号为第几号的学生,假设班上有25个人
public class Work01 {
public static void main(String[] args) {
int [] stus=new int[25];
//编号
for (int i = 0; i < stus.length; i++) {
stus[i]=i+1;
}
//标记法,用0表示退出
int k=0;//报数器
int num=0;//表示淘汰的人数
while (true){//重复转圈报数
//表示实现一轮报数
for (int i = 0; i < stus.length; i++) {
if (stus[i]!=0){//过滤掉淘汰的人
k++;//报数
if (k%3==0){
stus[i]=0;//淘汰
num++;
if (num==24){//淘汰人数为24,结束游戏
System.out.println(Arrays.toString(stus));
return;
}
}
}
}
}
}
}
4.杨辉三角及效果图
代码如下(示例):
案例:2.打印杨辉三角形(要求打印10行),如下所示:(使用二维数组)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
package work1;
public class Work02 {
public static void main(String[] args) {
//定义一个长度为10的二维数组
int [][] num=new int[10][];
//行数和个数的关系
for (int i = 0; i <num.length ; i++) {
num[i]=new int[i+1];
}
for (int i = 0; i < num.length; i++) {
for (int j = 0; j < num[i].length; j++) {
if(j==0||j==num[i].length-1){
num[i][j]=1;//左右端点
}else {
num[i][j]=num[i-1][j-1]+num[i-1][j];
}
}
}
//输出
for (int i = 0; i < num.length; i++) {
//输出每行前面的空格
for (int j = 0; j < 10-i; j++) {
System.out.print(" ");
}
for (int j = 0; j < num[i].length; j++) {
if(num[i][j]>=100)
System.out.print(num[i][j]+" ");
else if(num[i][j]>=10)
System.out.print(num[i][j]+" ");
else
System.out.print(num[i][j]+" ");
}
System.out.println();
}
}
}
总结
以上就是二维数组和二分查找法相关的案例内容,主要是利用二维数组的特点以及循环的结合来实现的。
本文地址:https://blog.csdn.net/StruggleBamboo/article/details/110877057