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;

    }

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

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



  • 相关阅读:
    开源 .net license tool, EasyLicense !
    Logging with NLog
    Logging with Log4net (二)
    Logging with Debug And Trace (一)
    ThoughtWorks代码挑战——FizzBuzzWhizz
    开源插件 :MahApps.Metro.IconPacks
    Java地址:
    小程序源码下载[demo整理自github]
    多块图形合并(自动合并相交块)
    Textbox
  • 原文地址:https://www.cnblogs.com/climberluoxi/p/1357820.html
Copyright © 2011-2022 走看看