• 07:矩阵归零消减序列和


    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 }
  • 相关阅读:
    【C# 代码小技巧】巧用 linq select 实现遍历集合返回元素 index
    [转载] redis 学习
    Html5 Canvas斗地主游戏
    K-近邻算法(KNN)
    Sql 把Xml字符串转换成一张表
    Asp.Net Mvc4分页,扩展HtmlHelper类
    SQL 分割字符串
    http://q.cnblogs.com/q/54251/
    读强化学习论文之MADDPG
    【回归】记Paddle强化学习训练营
  • 原文地址:https://www.cnblogs.com/zwfymqz/p/6522465.html
Copyright © 2020-2023  润新知