30 特殊的矩阵运算
作者: 卢婷时间限制: 1S章节: 二维数组
问题描述 :
输入m个方阵,方阵的元素是非0整数。对于n阶方阵A,明明现在需要进行特殊的运算。
例如:
A: 5 1 3
5 8 7
2 6 9
方阵A有两条对角线:从左上角到右下角的对角线,元素为5 8 9,以及从左下角到右上角的对角线,元素为2 8 3。
求A两条对角线元素相乘的和(对角线积),52+88+9*3=101;
求A两条对角线元素相除的和(对角线商):5/2+8/8+9/3=6。 (注意:求对角线商时用整除,所以5/2的结果为2。)
输入说明 :
输入由多组数据组成。
-
第一行有一个整数m,表示接下来有m组测试数据;
-
第二行有一个整数n,表示n阶方阵,0 < n < 10;
-
接下来的m行,每行有n*n个非0整数,整数间用空格分隔,每行对应一个矩阵。例如上述方阵A的输入格式为:5 1 3 5 8 7 2 6 9
输出说明 :
对每个矩阵,输出两个整数,表示对角线积和对角线商,用空格分隔。每个矩阵的输出结果占一行。
输入范例 :
2
3
5 1 3 5 8 7 2 6 9
-2 3 2 1 2 49 22 1 2
输出范例 :
101 6
-36 2
import java.util.Scanner;
public class test_30 {
/**
* 30 特殊的矩阵运算
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
sc.nextLine();
int m = sc.nextInt();
sc.nextLine();
String[] split;
int[][] a = new int[m][m];
int[] b = new int[m];
int[] c = new int[m];
int mutil,div,count,x,y;
while(n-->0){
split = sc.nextLine().trim().split(" ");
x=0;
y=m-1;
mutil=0;
div=0;
count=0;
for (int j = 0; j < m; j++) {
for (int k = 0; k < m; k++) {
if(j==k){
b[x++]=Integer.valueOf(split[count]);
}
if(j+k==m-1){
c[y--]=Integer.valueOf(split[count]);
}
a[j][k] = Integer.valueOf(split[count++]);
}
}
for (int i = 0; i < m; i++) {
mutil+=b[i]*c[i];
div+=b[i]/c[i];
}
System.out.println(mutil+" "+div);
}
}
}