题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=37
根据这道题的描述易让人想的复杂,但通过细心寻找,可以找到规律。因此做题时先要寻找规律,如果没有规律,再选择普通方法。
解法:
这道题要求最短路径,由于要经过两个城市时,走对角线的长度要大于两条直线的长度,因此我们要避免走对角线,同时我们还要回到原来的地方,那么就会发现只有当两条边长m,n都为奇数时,就一定要走一条对角线才能回到原点,因此最短路径需要在原来m*n的基础上加上0.41。
代码:
#include<stdio.h>
int main()
{
int m,n,T,i;
double len;
scanf("%d",&T);
for(i=1;i<=T;i++)
{
scanf("%d%d",&m,&n);
if((m%2==0)||(n%2==0))
{
len=m*n;
}
else
len=m*n+0.41;
printf("Scenario #%d:\n",i);
printf("%.2f\n\n",len);
}
return 0;
}