《Java语言程序设计与数据结构》编程练习答案(第八章)

《Java语言程序设计与数据结构》编程练习答案(第八章)

英文名:Introduction to Java Programming and Data Structures, Comprehensive Version, 11th Edition

8.1

import java.util.*;
import java.io.*;

public class book {
    public static void main(String[] args)
            throws Exception
    {
        Scanner input = new Scanner(System.in);
        double[][] test = new double[3][4];
        System.out.printf("Enter a 3-by-4 matrix by row:");
        for(int i=0;i<3;i++)
            for(int j=0;j<4;j++)
                test[i][j]=input.nextDouble();
        for(int i=0;i<4;i++)
            System.out.printf("Sum of the elements at column %d is %.1f\n",i,sumColumn(test,i));
    }
    public static double sumColumn(double[][] m,int columnIndex){
        int rows = m.length;
        double sum = 0.0;
        for(int i=0;i<rows;i++){
            sum+=m[i][columnIndex];
        }
        return sum;
    }
}

8.2

import java.util.*;
import java.io.*;

public class book {
    public static void main(String[] args)
            throws Exception
    {
        Scanner input = new Scanner(System.in);
        double[][] test = new double[4][4];
        System.out.println("Enter a 4-by-4 matrix row by row:");
        for(int i=0;i<4;i++)
            for(int j=0;j<4;j++)
                test[i][j]=input.nextDouble();
        System.out.println("Sum of the elements in the major diagonal is "+sumMajorDiagonal(test));
    }
    public static double sumMajorDiagonal(double[][] m){
        int len = m.length;
        double sum = 0.0;
        for(int i=0;i<len;i++)
            sum+=m[i][i];
        return sum;
    }
}

8.6

import java.util.*;
import java.io.*;

public class book {
    public static void main(String[] args)
            throws Exception
    {
        Scanner input = new Scanner(System.in);
        double[][] m1 = new double[3][3];
        double[][] m2 = new double[3][3];
        System.out.println("Enter matrix1:");
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                m1[i][j] = input.nextDouble();
        System.out.println("Enter matrix2:");
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                m2[i][j] = input.nextDouble();
        double[][] ass = multiMatrix(m1,m2);
        System.out.println(m1[0][0]+" "+m1[0][1]+" "+m1[0][2]+"   "+m2[0][0]+" "+m2[0][1]+" "+m2[0][2]+"   "+ass[0][0]+" "+ass[0][1]+" "+ass[0][2]);
        System.out.println(m1[1][0]+" "+m1[1][1]+" "+m1[1][2]+" * "+m2[1][0]+" "+m2[1][1]+" "+m2[1][2]+" = "+ass[1][0]+" "+ass[1][1]+" "+ass[1][2]);
        System.out.println(m1[2][0]+" "+m1[2][1]+" "+m1[2][2]+"   "+m2[2][0]+" "+m2[2][1]+" "+m2[2][2]+"   "+ass[2][0]+" "+ass[2][1]+" "+ass[2][2]);
    }
    public static double[][] multiMatrix(double[][] a,double[][] b){
        int rows = a.length;
        int columns = b[0].length;
        double[][] res = new double[rows][columns];
        for(int i=0;i<rows;i++)
            for(int j=0;j<rows;j++){
                for(int k=0;k<a[0].length;k++)
                    res[i][j]+=a[i][k]*b[k][j];
            }
        return res;
    }
}

8.9

import java.util.*;
import java.io.*;

public class book {
    public static void main(String[] args)
            throws Exception
    {
        Scanner input = new Scanner(System.in);
        char[][] dick = new char[3][3];
        for(int i =0;i<3;i++)
            for(int j=0;j<3;j++)
                dick[i][j]='a';
        int xo = 0;
        char[] xos = {'X','O'};
        while(true){
            printMap(dick);
            int row;
            int column;
            System.out.println("Enter a row (0,1, or 2) for player "+xos[xo%2]+":");
            row = input.nextInt();
            System.out.println("Enter a column (0,1, or 2) for player "+xos[xo%2]+":");
            column = input.nextInt();
            dick[row][column]=xos[xo%2];
            xo++;
            if(checkWin(dick,'X')){
                System.out.println("X player won");
                break;
            }else if(checkWin(dick,'O')){
                System.out.println("O player won");
                break;
            }
        }
    }
    public static void printMap(char[][] ass){
        System.out.println("..........");
        for(int i=0;i<3;i++){
            for(int j=0;j<3;j++){
                System.out.print("|");
                if(ass[i][j]=='a')
                    System.out.print(" ");
                else
                    System.out.print(ass[i][j]);
            }
            System.out.println("|");
            System.out.println("..........");
        }
    }
    public static boolean checkWin(char[][] ass,char xo){
        if(xo=='X'){
            for(int i=0;i<3;i++)
                if(ass[i][0]=='X'&&ass[i][1]=='X'&&ass[i][2]=='X')
                    return true;
            for(int i=0;i<3;i++)
                if(ass[0][i]=='X'&&ass[1][i]=='X'&&ass[2][i]=='X')
                    return true;
            if(ass[0][0]=='X'&&ass[1][1]=='X'&&ass[2][2]=='X')
                return true;
            if(ass[0][2]=='X'&&ass[1][1]=='X'&&ass[2][0]=='X')
                return true;
            return false;
        }else{
            for(int i=0;i<3;i++)
                if(ass[i][0]=='O'&&ass[i][1]=='O'&&ass[i][2]=='O')
                    return true;
            for(int i=0;i<3;i++)
                if(ass[0][i]=='O'&&ass[1][i]=='O'&&ass[2][i]=='O')
                    return true;
            if(ass[0][0]=='O'&&ass[1][1]=='O'&&ass[2][2]=='O')
                return true;
            if(ass[0][2]=='O'&&ass[1][1]=='O'&&ass[2][0]=='O')
                return true;
            return false;
        }
    }
}

8.11

import java.util.*;
import java.io.*;

public class book {
    public static void main(String[] args)
            throws Exception
    {
        Scanner input = new Scanner(System.in);
        int ass;
        System.out.println("Enter a number between 0 and 511:");
        ass = input.nextInt();
        int[] dick = new int[9];
        for(int i=0;i<9;i++){
            dick[i]=ass%2;
            ass/=2;
        }
        for(int i=0;i<3;i++){
            for(int j=0;j<3;j++){
                if(dick[3*i+j]==0)
                    System.out.print("T");
                else
                    System.out.print("H");
                System.out.print(" ");
            }
            System.out.print('\n');
        }
    }
}

8.17

import java.util.*;
import java.io.*;

public class book {
    public static void main(String[] args)
            throws Exception
    {
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        int limit = input.nextInt();
        double[][] loans  =new double[n][n];
        double[] balances = new double[n];
        for(int i=0;i<n;i++){
            balances[i] = input.nextDouble();
            int ass = input.nextInt();
            for(int j=0;j<ass;j++){
                int borrower = input.nextInt();
                loans[i][borrower]=input.nextDouble();
            }
        }
        System.out.print("Unsafe banks are ");
        boolean[] printed = new boolean[n];
        for(int i=0;i<n;i++)
            printed[i]=false;
        while(true){
            boolean changed = false;
            for(int i=0;i<n;i++){
                double sum = balances[i];
                for(int j=0;j<n;j++)
                    sum+=loans[i][j];
                if(sum<limit){
                    if(!printed[i]) {
                        System.out.print(i + " ");
                        printed[i] = true;
                        changed=true;
                    }
                    for(int k=0;k<n;k++)
                        loans[k][i]=0;
                }
            }
            if(!changed)
                break;
        }
    }
}

8.19

import java.util.*;
import java.io.*;

public class book {
    public static void main(String[] args)
            throws Exception
    {
        Scanner input = new Scanner(System.in);
        int rows;
        int columns;
        System.out.println("Enter the number of rows:");
        rows = input.nextInt();
        System.out.println("Enter the number of columns:");
        columns = input.nextInt();
        int[][] jesus = new int[rows][columns];
        System.out.println("Enter the matrix:");
        for(int i=0;i<rows;i++)
            for(int j=0;j<columns;j++)
                jesus[i][j] = input.nextInt();
        System.out.println(isConsecutiveFour(jesus));
    }
    public static boolean isConsecutiveFour(int[][] values){
        int rows = values.length;
        int columns = values[0].length;
        for(int i=0;i<rows;i++)
            for(int j=0;j<=columns-4;j++)
                if(values[i][j]==values[i][j+1]&&values[i][j]==values[i][j+2]&&values[i][j]==values[i][j+3])
                    return true;
        for(int i=0;i<columns;i++)
            for(int j=0;j<=rows-4;j++)
                if(values[j][i]==values[j+1][i]&&values[j][i]==values[j+2][i]&&values[j][i]==values[j+3][i])
                    return true;
        for(int i=3;i<rows;i++)
            for(int j=0;j<columns-3;j++)
                if(values[i][j]==values[i-1][j+1]&&values[i][j]==values[i-2][j+2]&&values[i][j]==values[i-3][j+3])
                    return true;
        for(int i=0;i<rows-3;i++)
            for(int j=0;j<columns-3;j++)
                if(values[i][j]==values[i+1][j+1]&&values[i][j]==values[i+2][j+2]&&values[i][j]==values[i+3][j+3])
                    return true;
        return false;
    }
}

8.20

import java.util.*;
import java.io.*;

public class book {
    public static void main(String[] args)
            throws Exception
    {
        Scanner input = new Scanner(System.in);
        String[] rys = {"red","yellow"};
        int ry = 0;
        int[] ptrs = {5,5,5,5,5,5,5};
        int[][] map = new int[6][7];
        while(true){
            printMap(map);
            if(isConsecutiveFour(map,1)){
                System.out.println("The red player won");
                break;
            }
            if(isConsecutiveFour(map,2)){
                System.out.println("The yellow player won");
                break;
            }
            System.out.print("Drop a "+rys[ry%2]+" disk at column (0-6):");
            int dick = input.nextInt();
            map[ptrs[dick]][dick]=ry%2+1;
            ptrs[dick]--;
            ry++;
        }
    }
    public static boolean isConsecutiveFour(int[][] values,int ass){
        int rows = values.length;
        int columns = values[0].length;
        for(int i=0;i<rows;i++)
            for(int j=0;j<=columns-4;j++)
                if(values[i][j]==values[i][j+1]&&values[i][j]==values[i][j+2]&&values[i][j]==values[i][j+3]&&values[i][j]==ass)
                    return true;
        for(int i=0;i<columns;i++)
            for(int j=0;j<=rows-4;j++)
                if(values[j][i]==values[j+1][i]&&values[j][i]==values[j+2][i]&&values[j][i]==values[j+3][i]&&values[j][i]==ass)
                    return true;
        for(int i=3;i<rows;i++)
            for(int j=0;j<columns-3;j++)
                if(values[i][j]==values[i-1][j+1]&&values[i][j]==values[i-2][j+2]&&values[i][j]==values[i-3][j+3]&&values[i][j]==ass)
                    return true;
        for(int i=0;i<rows-3;i++)
            for(int j=0;j<columns-3;j++)
                if(values[i][j]==values[i+1][j+1]&&values[i][j]==values[i+2][j+2]&&values[i][j]==values[i+3][j+3]&&values[i][j]==ass)
                    return true;
        return false;
    }
    public static void printMap(int[][] values){
        for(int i=0;i<6;i++){
            for(int j=0;j<7;j++){
                System.out.print("|");
                if(values[i][j]==0)
                    System.out.print(" ");
                else if(values[i][j]==1)
                    System.out.print("R");
                else if(values[i][j]==2)
                    System.out.print("Y");
            }
            System.out.println("|");
        }
        System.out.println("---------------");
    }
}

8.35

import java.util.*;
import java.io.*;

public class book {
    public static void main(String[] args)
            throws Exception
    {
        Scanner input = new Scanner(System.in);
        System.out.print("Enter the number of rows in the matrix:");
        int ass = input.nextInt();
        int[][] test = new int[ass][ass];
        System.out.println("Enter the matrix row by row:");
        for(int i=0;i<ass;i++)
            for(int j=0;j<ass;j++)
                test[i][j]=input.nextInt();
        int[] jesus = findLargestBlock(test);
        System.out.printf("The maximum square submatrix is at (%d,%d) with size %d\n",jesus[0],jesus[1],jesus[2]);
    }
    public static int[] findLargestBlock(int[][] m){
        int[] res = new int[3];
        int n = m.length;
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++){
                for(int r=1;r<=Math.min(n-i,n-j);r++){
                    if(allOne(i,j,r,m)){
                        if(r>res[2]){
                            res[0]=i;
                            res[1]=j;
                            res[2]=r;
                        }
                    }
                }
            }
        return res;
    }
    public static boolean allOne(int pinr,int pinc, int range,int[][] m){
        boolean all1 = true;
        for(int i=0;i<range;i++)
            for(int j=0;j<range;j++){
                if(m[pinr+i][pinc+j]==0)
                {
                    all1 = false;
                    break;
                }
            }
        return all1;
    }
}

第八章 完

发布了113 篇原创文章 · 获赞 73 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/swy_swy_swy/article/details/105255704