OpenJudge计算概论-矩阵归零消减序列和
矩阵归零消减序列和
总时间限制: 1000ms 内存限制: 65536kB
描述
给定一个n*n的矩阵( <= n <= ,元素的值都是非负整数)。通过n-1次实施下述过程,可把这个矩阵转换成一个1*1的矩阵。每次的过程如下:
首先对矩阵进行行归零:即对每一行上的所有元素,都在其原来值的基础上减去该行上的最小值,保证相减后的值仍然是非负整数,且这一行上至少有一个元素的值为0。
接着对矩阵进行列归零:即对每一列上的所有元素,都在其原来值的基础上减去该列上的最小值,保证相减后的值仍然是非负整数,且这一列上至少有一个元素的值为0。
然后对矩阵进行消减:即把n*n矩阵的第二行和第二列删除(如果二维数组为a[][],则删除的是a[][]所在的行和列),使之转换为一个(n-)*(n-)的矩阵。
下一次过程,对生成的(n-)*(n-)矩阵实施上述过程。显然,经过n-1次上述过程, n*n的矩阵会被转换为一个1*1的矩阵。
请求出每次消减前a[][]值之和。
输入
第一行是一个整数n。
其后是n个n*n的矩阵。
每个矩阵占n行,每行有n个正整数,每个整数间用空格分隔。
输出
输出为n行,每行上的整数为对应矩阵归零消减过程中,每次消减前a[][]值之和。
样例输入 样例输出 1
提示:
请比较两种做法!
第一种做法得到的结果不正确,第二种才是正确的。![]()
其实就是说:归零时先按行归零,再按列归零。
对每一行或每一列归零时,扫描行或列,假如里面含0,那这一行或列的归零工作就免了,直接处理下一行或列。
#include<stdio.h>
int main()
{
int a[][],i,j,k,n;
int rowMin,colMin;
int x;
int sum;
freopen("5.in","r",stdin);
freopen("result.out","w",stdout);
scanf("%d",&n);
for(k=;k<n;k++)
{
//输入二维数组
for(i=;i<n;i++)
{
for(j=;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
sum=;
//归零和消减,整个操作有n-1次,每次进行时数组的阶是x
for(x=n;x>;x--)
{
//行的归零
for(i=;i<x;i++)
{
rowMin=a[i][];
for(j=;j<x&&rowMin>;j++)
{
if(a[i][j]<rowMin)
{
rowMin=a[i][j];
}
}
if(rowMin!=)
{
for(j=;j<x;j++)
{
a[i][j]=a[i][j]-rowMin;
}
} }
//列的归零
for(j=;j<x;j++)
{
colMin=a[][j];
for(i=;i<x&&colMin>;i++)
{
if(a[i][j]<colMin)
{
colMin=a[i][j];
}
}
if(colMin!=)
{
for(i=;i<x;i++)
{
a[i][j]=a[i][j]-colMin;
}
}
}
sum=sum+a[][];
//下面是消减
i=;
for(j=;j<x;j++)
a[i][j-]=a[i][j];
j=;
for(i=;i<x;i++)
a[i-][j]=a[i][j];
for(i=;i<x;i++)
{
for(j=;j<x;j++)
{
a[i-][j-]=a[i][j];
}
}
}
printf("%d\n",sum);
}
return ;
}
OpenJudge计算概论-矩阵归零消减序列和的更多相关文章
- OpenJudge计算概论-矩阵交换行
/*======================================================================== 矩阵交换行 总时间限制: 1000ms 内存限制: ...
- OpenJudge计算概论-取石子游戏
OpenJudge计算概论-取石子游戏[函数递归练习] /*====================================================================== ...
- Openjudge计算概论-计算矩阵边缘元素之和
/*======================================================================== 计算矩阵边缘元素之和 总时间限制: 1000ms ...
- Openjudge计算概论——数组逆序重放【递归练习】
/*===================================== 数组逆序重放 总时间限制:1000ms 内存限制:65536kB 描述 将一个数组中的值按逆序重新存放. 例如,原来的顺 ...
- OpenJudge计算概论-计算书费
/*============================================== 计算书费 总时间限制: 1000ms 内存限制: 65536kB 描述 下面是一个图书的单价表: 计算 ...
- OpenJudge计算概论-最高的分数
/*======================================================== 最高的分数 总时间限制: 1000ms 内存限制: 65536kB 描述 孙老师 ...
- Openjudge计算概论-求序列中的众数
/*===================================== 求序列中的众数 总时间限制: 1000ms 内存限制: 65536kB 描述 输入一个长度为N的整数序列 (不多于128 ...
- OpenJudge计算概论-找最大数序列
/*===================================== 找最大数序列 总时间限制: 1000ms 内存限制: 65536kB 描述 输入n行(n 不大于 30),每行不超过10 ...
- Openjudge计算概论-奇数单增序列
/*===================================== 奇数单增序列 总时间限制: 1000ms 内存限制: 65536kB 描述 给定一个长度为N(不大于500)的正整数序列 ...
随机推荐
- Linux内核中关于内存的数据结构
物理页面 /* * Try to keep the most commonly accessed fields in single cache lines * here (16 bytes or gr ...
- 使用免费内测托管平台fir.im测试
1,使用Xcode先行把项目导成ipa文件.登录http://fir.im/ 2.点击左上角的苹果标志,把准备好的ipa文件拖入即可.4.填写相关材料即可开始上传5,让飞机灰一会即可.6.接着会看见: ...
- 【转发】构建高可伸缩性的WEB交互式系统(中)
原文转自:http://kb.cnblogs.com/page/503953/ 在<构建高可伸缩性的WEB交互式系统>的第一篇,我们介绍了Web交互式系统中平台的可伸缩性.本文将描述模块的 ...
- for else
- poj 1840 暴力+标记
Description Consider equations having the following form: a1x1 3+ a2x2 3+ a3x3 3+ a4x4 3+ a5x5 3=0 T ...
- Matlab神经网络工具箱学习之二
螃蟹的分类 这个例子的目的是根据螃蟹的品种.背壳的长宽等等属性来判断螃蟹的性别,雄性还是雌性. 训练数据一共有六个属性: species, frontallip, rearwidth, length, ...
- php部分(查看文件、建立站点、语法变量、变量的几个方法、“全局局部变量的调用”、static、函数参数的作用域);
浏览器查看php文件: 建立站点,浏览php文件: php的语法 <?php echo "Hello World!"; ?> 注释语法: <?php // 这是 ...
- hdu1811 并查集+拓扑序
题意:现在有一个排名系统,有一系列信息,分别是 > < = 的比较,而如果最终相等,就会将这些相等的按照序号从小到大排,问给出的信息是否可以确定完整的排序. 由于如果很多点相等,他们肯定能 ...
- springMvc源码学习之:spirngMvc的参数注入的问题
转载:https://my.oschina.net/lichhao/blog/172562 概述 在SpringMVC中,可以使用@RequestBody和@ResponseBody两个注解,分别完成 ...
- OSPF
Ospf OSPF(开放最短路径优先协议)是一种无类内部网关协议(IGP):是一种链路状态路由选择协议: 入门: 可以把整个网络(一个自治系统AS)看成一个王国,这个王国可以分成几个 区(area), ...