zoukankan      html  css  js  c++  java
  • 旋转队列

    21  22  ....

    20   7   8   9   10

    19   6   1   2   11

    18   5   4   3   12

    17  16 15  14  13

    如上一个旋转队列,1的坐标为(0,0),x往右为正,y往下为正,比如2(1,0),3(1,1),7(-1,-1).

    写一个函数,输入坐标返回对应的值.

     我是这样干的:

    int foo(int des_x, int des_y)
    {
        
    int x=0,y=0,i,j,cal=1;
        
    if(des_x==0&&des_y==0){
            
    return(1);    
        }
        
    for(i=1;1==1;i++){
            
    for(j=1;j<=i;j++){
                
    if(i&1)x++;
                
    else x--;            
                cal
    ++;
                
    if(x==des_x&&y==des_y){
                    
    return(cal);
                }
            }        
            
    for(j=1;j<=i;j++){
                
    if(i&1)y++;
                
    else y--;
                cal
    ++;
                
    if(x==des_x&&y==des_y){
                    
    return(cal);
                }            
            }        
            
        }

    }

    别人是这样干的

    #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;
        
    else if(y == -t)
            v
    +=3*u+x-t;
        
    else if(y == t)
            v
    +=t-x;
        
    else
            v
    +=y-t;
        
    return v;

    }

    虽然都完成了功能,但是明显别人的代码要聪明一些,这种聪明是要积累的。我自己的代码在坐标比较大的时候运算肯定很慢的,

    别人的就不会。我暂时还没想通他是怎样一个思路把这个算法想出来的。



  • 相关阅读:
    DB2 中like的通配符以及escape关键字定义转义字符的使用
    Java编译后产生class文件的命名规则
    在Servlet的GenericServlet类中为什么有两个init()方法
    Java Web开发笔记
    EL表达式
    将NSString转换编码集变为GBK或GB2312
    转,ios开源程序集
    整理 被appstore 拒绝审核通过的原因
    在程序中如何把两张图片合成为一张图片
    object c 操作date类型
  • 原文地址:https://www.cnblogs.com/climberluoxi/p/1357820.html
Copyright © 2011-2022 走看看