07:矩陣歸零消減序列和
- 總時間限制:
- 1000ms
- 記憶體限制:
- 65536kB
- 描述
-
給定一個n*n的矩陣(3 <= n <= 100,元素的值都是非負整數)。通過(n-1)次實施下述過程,可把這個矩陣轉換成一個1*1的矩陣。每次的過程如下:
首先對矩陣進行行歸零:即對每一行上的所有元素,都在其原來值的基礎上減去該行上的最小值,保證相減後的值仍然是非負整數,且這一行上至少有一個元素的值為0。
接著對矩陣進行列歸零:即對每一列上的所有元素,都在其原來值的基礎上減去該列上的最小值,保證相減後的值仍然是非負整數,且這一列上至少有一個元素的值為0。
然後對矩陣進行消減:即把n*n矩陣的第二行和第二列刪除,使之轉換為一個(n-1)*(n-1)的矩陣。
下一次過程,對生成的(n-1)*(n-1)矩陣實施上述過程。顯然,經過(n-1)次上述過程, n*n的矩陣會被轉換為一個1*1的矩陣。
請求出每次消減前位於第二行第二列的元素的值。
- 輸入
- 第一行是一個整數n。
接下來n行,每行有n個正整數,描述了整個矩陣。相鄰兩個整數間用單個空格分隔。 - 輸出
- 輸出為n行,每行上的整數為對應矩陣歸零消減過程中,每次消減前位於第二行第二列的元素的值。
- 樣例輸入
-
3 1 2 3 2 3 4 3 4 5
- 樣例輸出
-
3 0 0
1 #include<iostream> 2 #include<iomanip> 3 #include<cmath> 4 #include<cstring> 5 using namespace std; 6 int a[200][200]; 7 int main() { 8 int i; 9 int j; 10 int k; 11 int l; 12 int m; 13 int n; 14 int ma; 15 int n1; 16 cin>>n; 17 for (i=1;i<=n;i++) 18 for (j=1;j<=n;j++) 19 cin>>a[i][j]; 20 n1=n;//儲存矩陣的行數和列數 21 for (k=1;k<=n1;k++)//需要消減n1次 22 { 23 cout<<a[2][2]<<endl;//在每次消減之前輸出第i行i列 24 for (i=1;i<=n;i++) 25 { 26 ma=a[i][1];//儲存每行第一個值,防止出現空值 27 for(j=2;j<=n;j++) 28 if(a[i][j]<ma) 29 ma=a[i][j];//取出每行最小的值 30 for(j=1;j<=n;j++) 31 a[i][j]=a[i][j]-ma;//進行每行消減 32 } 33 for(j=1;j<=n;j++)//進行每列消減 34 { 35 ma=a[1][j];//同理,儲存該列的第一個值,防止出現空值 36 for(i=2;i<=n;i++) 37 if(a[i][j]<ma) 38 ma=a[i][j]; 39 for(i=1;i<=n;i++) 40 a[i][j]=a[i][j]-ma; 41 } 42 for(i=2;i<n;i++) 43 for(j=1;j<=n;j++) 44 a[i][j]=a[i+1][j]; 45 for(j=2;j<n;j++) 46 for(i=1;i<=n;i++) 47 a[i][j]=a[i][j+1];//進行刪減 48 n--; 49 } 50 return 0; 51 }