题目描述
刚学象棋的彩云想了解棋盘上的马是怎么走的,于是请教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);
}
}