分类:
2010-03-28 23:21:24
4、每一圈数字总数都是8t,右上角数字最大, 减去若干个t就得到四个边的数字,
这就是通过右上角数字取圈内任意数字的关键算法了
*/
#define abs(a) ((a)>0?(a):(-a))
#define max(a,b) ((a)>(b)?(a):(b))
void print_helix_number(int n){
int x, y;
for(y=-n;y<=n;y++) {
for(x=-n;x<=n;x++){
printf("%5d",lookupHelixNumber(x,y)); //n 5以上数字就不对齐拉,嘿嘿
}
printf("\n");
}
}
int lookupHelixNumber(int x, int y){
int t = max(abs(x), abs(y));
int ur = (2*t+1)*(2*t+1);
int n = 1;
if ( y == -t)
n = ur-t+x;
else if (x == -t)
n = ur-3*t-y; //3t, 5t啥的是规律,观察一圈数字就知道拉
else if (y == t)
n = ur-5*t-x;
else
n = ur-7*t+y;
return n;
}
//======================================================
表驱动解法: