2011年7月31日 星期日

d182: Q256: Quirksome Squares

內容 :
    3025這個4位數相當特別。如果你把他從中間切開你會得到2個長度相同的數30,25。而且此2數和的平方恰等於原來的數,我們稱這種數為quirksome number。

    (30+25)2=3025

    這個問題是:給你N位數(N=2,4,6,8),要找出符合以上性質的所有數。
    For example:4位數就是從0000到9999。注意:數字前方的0也要算在內。也就是說0001等於 (00+01)2 ,是一個4位數的quirksome number。

輸入說明 :
    輸入可能包含了好幾列測試資料,每一列只有一個數字N(N=2,4,6,8),代表要求的是幾位數的quirksome number。

輸出說明 :
    對每一個輸入N,你應該要輸出所有N位數的quirksome number,每個一行,由小到大排列。注意:數字前方的0不可忽略,例如2位數中的quirksome number 01不可只輸出1。

範例輸入 :
2
2

範例輸出 :
00
01
81
00
01
81

出處 :
    ACM 256 (管理:liouzhou_101)

程式碼 :
#include<stdio.h>

int main()
{
    int i,j,n,ans[4][10],point[4],ij,temp,loop;
    
    point[0] = 3;
    ans[0][0] = 0;
    ans[0][1] = 1;
    ans[0][2] = 81;
    
    for(i=1; i<4; i++)
        point[i] = 0;
    
    for(n=100,loop=1; loop<4; loop++)
    {
        for(i=0; i<n; i++)
            for(j=0; j<n; j++)
            {
                ij = (i+j) * (i+j) ;
                temp = i*n + j;
                if(ij == temp)
                    ans[loop][point[loop]++] = temp;
                else if(ij > temp)
                    break;
            }
        n = n * 10;
    }
    
    while(scanf("%d",&n)==1)
    {
        switch(n)
        {
            case 2:
                n = n/2 - 1;
                for(i=0; i<point[0]; i++)
                    printf("%02d\n",ans[n][i]);
                break;
            case 4:
                n = n/2 - 1;
                for(i=0; i<point[1]; i++)
                    printf("%04d\n",ans[n][i]);
                break;
            case 6:
                n = n/2 - 1;
                for(i=0; i<point[2]; i++)
                    printf("%06d\n",ans[n][i]);
                break;
            case 8:
                n = n/2 - 1;
                for(i=0; i<point[3]; i++)
                    printf("%08d\n",ans[n][i]);
                break;
        }
    }    
    return 0;
}



http://zerojudge.tw/ShowProblem?problemid=d182

沒有留言:

張貼留言