ccfcsp 202212-3 java题解

112 阅读1分钟
import java.util.Scanner;
import java.lang.Math;

public class Main {

    public static void main(String[] args) {
   // write your code here
        Scanner scanner = new Scanner(System.in);
        //输入Qij
        int[][] Qij = new int[8][8];
        for (int i=0;i<8;i++){
            for(int j=0;j<8;j++){
                Qij[i][j]=scanner.nextInt();
            }
        }

        //输入数据个数
        int n = scanner.nextInt();
        //输入要进行的任务
        int T = scanner.nextInt();

        //输入计数
        int k=0;

        //输入矩阵Mij
        int[][] Mij = new int[8][8];
        for(int i=0;i<8;i++){ //填充矩阵的左上部分
            if(i%2==0){ //填充方向右上
                for(int j=0;j<=i;j++){
                    if(k<n){
                        Mij[i-j][j]= scanner.nextInt();
                        k++;
                    }else{
                        Mij[i-j][j]= 0;
                    }
                }
            }
            else { //填充方向左下
                for(int j=0;j<=i;j++){
                    if(k<n){
                        Mij[j][i-j]= scanner.nextInt();
                        k++;
                    }else{
                        Mij[j][i-j]= 0;
                    }
                }
            }
        }
        for(int i=8;i<15;i++){ //填充矩阵的部分
            if(i%2==0){ //填充方向右上
                for(int j=i-7;j<=7;j++){
                    if(k<n){
                        Mij[i-j][j]= scanner.nextInt();
                        k++;
                    }else{
                        Mij[i-j][j]= 0;
                    }
                }
            }
            else { //填充方向左下
                for(int j=i-7;j<=7;j++){
                    if(k<n){
                        Mij[j][i-j]= scanner.nextInt();
                        k++;
                    }else{
                        Mij[j][i-j]= 0;
                    }
                }
            }
        }

        int[][] MQij = new int[8][8];
        //M*Q
        for (int i=0;i<8;i++){
            for(int j=0;j<8;j++){
                MQij[i][j]=Mij[i][j]*Qij[i][j];
            }
        }

        //逆变换
        double[][] finalM = new double[8][8];
        int[][] finalM2 = new int[8][8];
        for (int i=0;i<8;i++){
            for(int j=0;j<8;j++){

                finalM[i][j]=0;
                for(int u=0;u<8;u++){
                    for (int v=0;v<8;v++){
                        if(u==0&&v==0){
                            finalM[i][j] += 0.5 * MQij[u][v] * Math.cos(0) * Math.cos(0);
                        }else if(u==0){
                            finalM[i][j] += Math.pow(0.5,0.5) * MQij[u][v] * Math.cos(0) * Math.cos(Math.PI*(j+0.5)*v/8);
                        }else if(v==0){
                            finalM[i][j] += Math.pow(0.5,0.5) * MQij[u][v] * Math.cos(Math.PI*(i+0.5)*u/8) * Math.cos(0);
                        }else{
                            finalM[i][j] += MQij[u][v] * Math.cos(Math.PI*(i+0.5)*u/8) * Math.cos(Math.PI*(j+0.5)*v/8);
                        }
                    }
                }
                finalM[i][j] /= 4;

                finalM2[i][j]=(int)(finalM[i][j]+128+0.5); //加0.5可以达到四舍五入的效果
                if (finalM2[i][j]>255){
                    finalM2[i][j]=255;
                }
                if (finalM2[i][j]<0){
                    finalM2[i][j]=0;
                }
            }
        }


        //输出
        if (T==0){
            for (int i=0;i<8;i++) {
                for (int j = 0; j < 8; j++) {
                    System.out.print(Mij[i][j]+" ");
                }
                System.out.println();
            }
        }else if(T==1){
            for (int i=0;i<8;i++) {
                for (int j = 0; j < 8; j++) {
                    System.out.print(MQij[i][j]+" ");
                }
                System.out.println();
            }
        }else{
            for (int i=0;i<8;i++) {
                for (int j = 0; j < 8; j++) {
                    System.out.print(finalM2[i][j]+" ");
                }
                System.out.println();
            }
        }
    }
}