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
沒有留言:
張貼留言