null

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

写之前先写一个关于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");
    }
}
posted on 2011-04-30 10:51  Null_x1  阅读(804)  评论(0编辑  收藏  举报