HDU4772

HUD4772诸葛亮的密码

题目描述:给出两个N*N的矩阵(0<N<=30且为整数),固定其中一个矩阵,使另一个矩阵旋转0度,90度,180度与270度,分别与矩阵一重叠并对比对应位置上的数。(矩阵中的数X满足:0<=X<300X为整数),记旋转方式i时两矩阵对应位置的数相等的个数为ansi,则求最大的ansi值。

输入:首先是一个N,然后依次是两个N*N矩阵,(当输入N=0时表示输入结束)

输出:最大的ansi

分析:行号,列号从0开始计数。

旋转0度时:(ij)变为(ij)。

旋转90度时:(ij)变为(n-1-ji)。此时(ij)行i变成了它的列号,它原本的列号j变成了新的行n-1-j号。

旋转180度时:等于两个90度,(ij)变为(n-1-in-1-j

旋转270度时:(ij)变为(jn-1-i

然后对应比较求最大ansi即可。

代码:

#include<cstdio>
#include<algorithm>
using namespace std;

int main()
{
    int n;
    int a[40][40],b[40][40];
    while(scanf("%d",&n)==1&&n)
    {
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
                scanf("%d",&a[i][j]);
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
                scanf("%d",&b[i][j]);
        int ans=0;
        int sum=0;
        for(int i=0;i<n;i++)//0 d
            for(int j=0;j<n;j++)
                if(a[i][j]==b[i][j])
                    sum++;
        ans=max(ans,sum);
        sum=0;
        for(int i=0;i<n;i++)//90d
            for(int j=0;j<n;j++)
                if(a[i][j]==b[n-1-j][i])
                    sum++;
        ans=max(ans,sum);
        sum=0;
        for(int i=0;i<n;i++)//180d
            for(int j=0;j<n;j++)
                if(a[i][j]==b[n-1-i][n-1-j])
                    sum++;
        ans=max(ans,sum);
        sum=0;
        for(int i=0;i<n;i++)//270d
            for(int j=0;j<n;j++)
                if(a[i][j]==b[j][n-1-i])
                    sum++;
        ans=max(ans,sum);
        printf("%d\n",ans);
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值