问题描述 :
输入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
害,自己搞麻烦了,又整了半天=~=,什么时候才可以变厉害啊,菜死了
#include<stdio.h>
#include<stdlib.h>
int main(){
int m,n,i,j,**a,sum1,sum2,x1,x2;
scanf("%d",&n);
scanf("%d",&m);
while(n--){
a=(int**)malloc(sizeof(int*)*m);
for(i=0;i<m;i++){
a[i]=(int*)malloc(sizeof(int)*m);
}
for(i=0;i<m;i++){
for(j=0;j<m;j++){
scanf("%d",&a[i][j]);
}
}
//从列先开始遍历
sum1=0;sum2=0;
for(j=0;j<m;j++){
x1=a[j][j];//这就是左上到右下的元素值,易找
for(i=0;i<m;i++){
if((m-1)==i+j){//这是左下到右上的元素
x2=a[i][j];
break;
}
}
sum1+=x1*x2;
sum2+=(x1/x2);
}
printf("%d %d\n",sum1,sum2);
}
return 0;
}