二次元配列、二分探索法、楊輝三角形
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次元配列の特性とループの組み合わせにより実現されています。