矩阵归零消减序列和

【描述】SV8100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

给定一个n*n的矩阵(3<n<100,元素的值都是非负整数)。通过n-1次实施下述过程,可把这个矩阵转换成一个1*1的矩阵。每次的过程如下:SV8100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

首先对矩阵进行行归零:即对每一行上的所有元素,都在其原来值的基础上减去该行上的最小值,保证相减后的值仍然是非负整数,且这一行上至少有一个元素的值为0。SV8100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

接着对矩阵进行列归零:即对每一列上的所有元素,都在其原来值的基础上减去该列上的最小值,保证相减后的值仍然是非负整数,且这一列上至少有一个元素的值为0。SV8100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

然后对矩阵进行消减:即把n*n矩阵的第二行和第二列删除,使之转换为一个(n-1)*(n-1)的矩阵。SV8100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

下一次过程,对生成的(n-1)*(n-1)矩阵实施上述过程。显然,经过n-1次上述过程, n*n的矩阵会被转换为一个1*1的矩阵。SV8100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

请求出每次消减前位于第二行第二列的元素的值。SV8100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

【输入】SV8100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

第一行是一个整数n。SV8100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

接下来行,每行有个正整数,描述了整个矩阵。相邻两个整数间用单个空格分隔。SV8100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

【输出】SV8100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

输出为n行,每行上的整数为对应矩阵归零消减过程中,每次消减前位于第二行第二列的元素的值。SV8100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

【样例输入】SV8100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

3
1 2 3
2 3 4
3 4 5

【样例输出】SV8100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

3
0
0

【参考程序】SV8100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

C++版本SV8100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
 SV8100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

  1. # include <iostream> 
  2.  
  3. using namespace std; 
  4.  
  5. int main() 
  6.     int arr[105][105] = { 0 }; 
  7.     int n; 
  8.     cin >> n; 
  9.     // 读入数据 
  10.     for (int i = 0;i < n;i++) 
  11.     { 
  12.         for (int j = 0;j < n;j++) 
  13.         { 
  14.             cin >> arr[i][j]; 
  15.         } 
  16.     } 
  17.     while (n > 0) 
  18.     { 
  19.         //输出数据 
  20.         cout << arr[1][1] << endl; 
  21.         // 行归零 
  22.         for (int i = 0;i < n;i++) 
  23.         { 
  24.             int k = arr[i][0]; 
  25.             for (int j = 1;j < n;j++) 
  26.             { 
  27.                 if (arr[i][j] < k) 
  28.                 { 
  29.                     k = arr[i][j]; 
  30.                 } 
  31.             } 
  32.             for (int j = 0;j < n;j++) 
  33.             { 
  34.                 arr[i][j] -= k; 
  35.             } 
  36.         } 
  37.         // 列归零 
  38.         for (int j = 0;j < n;j++) 
  39.         { 
  40.             int k = arr[0][j]; 
  41.             for (int i = 1;i < n;i++) 
  42.             { 
  43.                 if (arr[i][j] < k) 
  44.                 { 
  45.                     k = arr[i][j]; 
  46.                 } 
  47.             } 
  48.             for (int i = 0;i < n;i++) 
  49.             { 
  50.                 arr[i][j] -= k; 
  51.             } 
  52.         } 
  53.         //消减行 
  54.         for (int i = 1;i < n - 1;i++) 
  55.         { 
  56.             for (int j = 0;j < n;j++) 
  57.             { 
  58.                 arr[i][j] = arr[i + 1][j]; 
  59.             } 
  60.         } 
  61.         //消减列 
  62.         for (int j = 1;j < n - 1;j++) 
  63.         { 
  64.             for (int i = 0;i < n - 1;i++) 
  65.             { 
  66.                 arr[i][j] = arr[i][j + 1]; 
  67.             } 
  68.         } 
  69.         n -= 1;//矩阵维数降1 
  70.     } 
  71.     return 0; 

关 键 词

矩阵归零消减序列和

相关教程

提示声明

  • 免责声明:本站资源均来自网络或者用户投稿,仅供用于学习和交流:如有侵权联系删除!

猜你喜欢