ZCMU 1595:TomCat要吃飯

Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 108 Solved: 49

Description

TomCat 是一次單身Cat,但是他有著很多的基友,每次吃飯都會(huì)QQ他的某一只基友,然而,他的基友Jerry 總是很墨跡。等待是無(wú)聊的,這時(shí)TomCat在學(xué)校的地上亂走,這時(shí)他發(fā)現(xiàn)地上有方塊鋪成的,他按照下圖的規(guī)律走,現(xiàn)在無(wú)聊的TomCat想知道,他如果走了n步,他應(yīng)該在什么位置,位置用坐標(biāo)(x,y)表示。

image
image.gif

?

Input

每次輸入一個(gè)數(shù)n,n=0是輸入結(jié)束(n<=2*10^9)

Output

輸出坐標(biāo)(x,y)

Sample Input

8 20 25 0

Sample Output

2 3 5 4 1 5

HINT

題解:

找規(guī)律后分類(lèi)討論。

|1 |
| 2 3 4 |
| 5 6 7 8 9 |
| 10 11 12 13 14 15 16 |
| 17 18 19 20 21 22 23 24 25 |
| 26 27 28 29 30 31 32 33 34 35 36 |
| ...... |

1、先找坐標(biāo)類(lèi)似(1,1),(2,2),(3,3)的數(shù)字對(duì)應(yīng)的是:1,3,7。數(shù)字取平方根再加1就是它的坐標(biāo)。

| 坐標(biāo) | 對(duì)應(yīng)數(shù)字 | 對(duì)應(yīng)數(shù)字取平方根取整 |
| (1,1) | 1 |
|
| (2,2) | 3 | 1 |
| (3,3) | 7 | 2 |
| (4,4) | 13 | 3 |
| .... | ... | ... |

2、拿輸入8舉例,距離8的兩個(gè)平方數(shù),一個(gè)是4,另一個(gè)是9.很明顯8距離9更近,這樣能判斷出8橫縱坐標(biāo)中的一個(gè)了,但是如何判斷是橫坐標(biāo)還是縱坐標(biāo)?再這里我舉例了幾個(gè)數(shù)字以及列出坐標(biāo)來(lái)幫助自己判斷。

| 8 (2,2) | 15(4,2) |
| 24(2,5) | 35(6,2) |

8和24的縱坐標(biāo)都是取平方根的整數(shù)部分之后加1,橫坐標(biāo)都是平方根取整數(shù)部分平方-自身。

那么15跟35剛好是橫縱坐標(biāo)倒過(guò)來(lái),如何區(qū)別?8和24的平平方根取整數(shù)是偶數(shù),而15跟35是奇數(shù)。

3、拿輸入20舉例,距離20的兩個(gè)平方數(shù),一個(gè)是16,一個(gè)是25。很明顯20距離16更近。

| 6 (3,2) | 11 (2,4) |
| 20 (5,4) | 27 (2,6) |

6和20的橫坐標(biāo)都是取平方根的整數(shù)部分之后加1,縱坐標(biāo)是自身-平方根取整數(shù)部分。

11跟27橫縱坐標(biāo)與6和20是倒過(guò)來(lái)的。

4、還有一種是討論本身就是平方數(shù)的情況,也是根據(jù)平方根取整后的奇偶性來(lái)判斷。

代碼:

#include<stdio.h>
#include<math.h>
int main()
{
    int n;
    double l,r;
    double y;
    int x;
    int a,b;
    while(~scanf("%d",&n))
    {
        if(n==0)
            break;
        y=sqrt(n);
        x=(int)sqrt(n);          //平凡根取整數(shù)部分
        l=x*x;                   //左邊的平方數(shù)
        r=(x+1)*(x+1);           //右邊的平方數(shù)
        l=n-l;                   //數(shù)字本身跟左邊平方數(shù)差多少
        r=r-n;                   //數(shù)字本身跟右邊平方數(shù)差多少
        if(x*x==n)               //討論數(shù)字本身是平方數(shù)的情況
        {
            if(x%2==0)
            {
                a=x;
                b=1;
                //printf("6\n");
            }
            else
            {
                a=1;
                b=x;
                //printf("7\n");
            }
        }
        else
        {
            if(l<r&&x%2==0)              //距離左邊平方數(shù)更近且其平凡根為偶數(shù)
            {
                a=x+1;
                b=n-x*x;
                //printf("1\n");
            }
            else if(l<r&&x%2!=0)
            {
                a=n-x*x;
                b=x+1;
                if(a==0)
                {
                    a=1;
                    b=x;
                }
                //printf("2\n");
            }
            else if(l>r&&x%2==0)
            {
                a=(x+1)*(x+1)-n+1;
                b=x+1;
                //printf("3\n");
            }
            else if(l>r&&x%2!=0)
            {
                a=x+1;
                b=(x+1)*(x+1)-n+1;
                //printf("4\n");
            }
            else if(l==r)
            {
                a=x+1;
                b=x+1;
                //printf("5\n");
            }
        }

        printf("%d %d\n",a,b);
    }
    return 0;
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容