二次元配列、二分探索法、Java配列の楊輝三角形の場合

1.コードとレンダリング

1.2次元配列のケースと効果の図

ケース:3つのクラスのそれぞれに5人の生徒がいることがわかっています。2次元配列を使用して、すべての生徒の結果を動的に入力し、各クラスの平均、最良、および最悪の結果を計算してください。3つのクラスのすべての生徒の中で、平均スコアが最高、スコアが最高、スコアが最低のクラスを順番に出力します。

コードは次のとおりです(例):

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行を印刷するために必要)を次のように印刷します:( 2次元配列を使用)
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();
        }
    }
}

ここに画像の説明を挿入

総括する

以上が2次元配列と二分探索法に関する事例内容であり、主に2次元配列の特性とループの組み合わせにより実現されています。

おすすめ

転載: blog.csdn.net/StruggleBamboo/article/details/110877057