#include <stdio.h> #define max(a, b) ((a) < (b) ? (b) : (a)) #define abs(a) ((a) > 0 ? (a) : -(a)) int foo(int x, int y) ...{ int t = max(abs(x),abs(y)); int u = t + t; int v = u -1; v = v * v + u; if (x ==-t) ...{ v += u + t -y; } elseif (y ==-t) ...{ v +=3* u +x - t; } elseif (y == t) ...{ v += t - x; } else ...{ v += y - t; } return v; } int main() ...{ int x, y; for (y=-4; y<=4; y++) ...{ for (x=-4; x<=4; x++) ...{ printf("%5d", foo(x, y)); } printf("/n"); } while (scanf("%d%d", &x, &y) ==2) ...{ printf("%d ", foo(x, y)); } return0; }
下面是我按照【算法分析】写的foo函数
int foo(int x, int y) ...{ if ( (0== x) && (0== y)) ...{ return1; } int t = max(abs(x), abs(y)); int u = (2*t +1) * (2*t +1); if (y ==-t) ...{ u -= (t - x); } elseif (x ==-t) ...{ u -= (t + y +2*t); }elseif (y == t) ...{ u -= (t + x +4*t); }else ...{ u -= (t - y +6*t); } return u ; }