首页 > 其他 > 详细

Hihocoder1662 : 查找三阶幻方([Offer收割]编程练习赛40)(暴力)

时间:2017-12-17 17:58:12      阅读:268      评论:0      收藏:0      [点我收藏+]
时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

给定一个N x M的矩阵,请你数一数其中有多少个3 x 3的子矩阵可以构成三阶幻方?  

如果3 x 3的矩阵中每一行、每一列和两条对角线上的3个数之和都相等,我们就认为其构成一个三阶幻方。

输入

第一行包含两个整数N和M。(1 ≤ N, M ≤ 100)  

以下N行M列包含一个N x M的矩阵A。(1 ≤ Aij ≤ 100)

输出

输出矩阵中包含多少个三阶幻方。

样例输入
5 5  
4 9 2 1 8  
3 5 7 6 2  
8 1 6 9 3  
2 3 3 6 9
5 6 9 3 6
样例输出
2 
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cstring>
using namespace std;
int a[110][110];
bool check(int u,int v)
{
    int res=0,tmp;
    for(int  i=0;i<3;i++) res+=a[u][v+i];
    for(int i=1;i<3;i++) {
        tmp=0;
        for(int j=0;j<3;j++) tmp+=a[u+i][v+j];
        if(tmp!=res) return false;
    }
    for(int i=0;i<3;i++){
        tmp=0;
        for(int j=0;j<3;j++) tmp+=a[u+j][v+i];
        if(tmp!=res) return false;
    }
    tmp=a[u][v]+a[u+1][v+1]+a[u+2][v+2];
    if(tmp!=res) return false;
    tmp=a[u][v+2]+a[u+1][v+1]+a[u+2][v];
    if(tmp!=res) return false;
    return true;
}
int main()
{
    int n,m,i,j,ans;
    while(~scanf("%d%d",&n,&m)){
        ans=0;
        for(i=1;i<=n;i++)
         for(j=1;j<=m;j++)
          scanf("%d",&a[i][j]);
          
        for(i=1;i<=n-2;i++)
         for(j=1;j<=m-2;j++)
          if(check(i,j)) ans++;
        
        printf("%d\n",ans);
    }return 0;
}

 

 

 

Hihocoder1662 : 查找三阶幻方([Offer收割]编程练习赛40)(暴力)

原文:http://www.cnblogs.com/hua-dong/p/8052489.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!