天天看點

東華研究所學生複試------30 特殊的矩陣運算

問題描述 :

輸入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。)

輸入說明 :

輸入由多組資料組成。

  1. 第一行有一個整數m,表示接下來有m組測試資料;
               
  2. 第二行有一個整數n,表示n階方陣,0 < n < 10;
               
  3. 接下來的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;
}