写之前先写一个关于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");
}
}
2万+

被折叠的 条评论
为什么被折叠?



