問題描述 :
輸入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;
}