学象棋 (10分)

题目描述

刚学象棋的彩云想了解棋盘上的马是怎么走的,于是请教CPA协会的同学,假如你就是被询问的同学,你便告诉她从(i,j)开始,可以走(i+2,j+1),(i-2,j+1),(i+2,j-1),(i-2,j-1),(i+1,j+2),(i+1,j-2),(i-1,j+2),(i-1,j-2).你想露一手便随手打了一个代码,要求是这样的,有一个m*n的矩阵(m条横线,n条竖线组成),选择任意一点开始,按照马的走动方式,最多可以走过多少不同的地方(可以无限走)。

输入格式:

第一行输入一个数T(T<=10),表示T组数据。 对于每组测试数据给出m,n(m,n<=10^8)。

输出格式:

对于每组数据给出一个数,表示最多可以走过多少不同的地方。

输入样例:

1
3 3

输出样例:

8

源代码

#include <stdio.h>
#include <math.h>
int main()
{
    
    
    long long int t,m,n;
    scanf("%lld",&t);
    while(t--)
    {
    
    
        long long int num=0;
        scanf("%lld %lld",&m,&n);
        if(n==1&&m==1||n>=3&&m>3||n>3&&m>=3)
            num=n*m;
        else if(m==1&&n>0||n==1&&m>0||m==2&&n==2)
            num=1;     
        else if(m>2&&n==2||m==2&&n>2)
        {
    
    
            if(n==2)
                num=2+(m-3)/2;
            if(m==2)
                num=2+(n-3)/2;
        }
        else if(m==3&&n==3)
            num=8;
        else 
            num=0;
        printf("%lld\n",num);
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_49930465/article/details/113177835