写之前先写一个关于pow函数的使用问题。见下面一段程序判断输出:
#include<stdio.h> #include<math.h> void show1() { printf("show1:%d",pow(2,2)); } void show2() { int t=2; int d=pow(2,2); printf("show2:%d",d);//或者用printf("%d",(int)pow(2,2)); } void main(void) { show1(); show2(); }
结果竟然是show1:0 ; show2:4 ;
pow返回类型是一个double,北庚认为printf("%d",pow(2,2));输出的只是double类型的前32位,即为0,
要想输出正确结果要么将输出格式改为"f"或者在用"%d"输出之前先强制将double转换为int再输出就能得到正确的结果了。
螺旋队列是输出格式如下的队列形式:
中间是1,然后从里到外依次增加。
分析:
附上源代码:
#include<stdio.h> #include<math.h> #define max(a,b) ((a)>(b)?(a):(b)) #define abs(a) ((a)>0?(a):(-(a))) int foo(int x,int y) { //当前(x,y)位于t层 int t=max(abs(x),abs(y)); //t-1层最后一个元素的大小 int last=pow((2*t-1),2); //对应于一层的下边 if(t==-y) { return last+3*t-x; } //对应于一层的左边 else if(t==-x) { return last+5*t+y; } //对应于一层的上边 else if(t==y) { return last+7*t+x; } //对应于一层的右边,但是不包括右边的第一个元素。 else if(t==x) { return last+t-y; } } void main(void) { int x,y; for(y=2;y>=-2;y--) { for(x=-2;x<=2;x++) { printf("%5d",foo(x,y)); } printf("\n"); } }
(转载时请注明作者和出处。未经许可,请勿用于商业用途)
更多文章请访问我的Blog: http://www.cnblogs.com/alexqdh