問題描述 :
數學一直是明明很喜歡的一門學科,不但上課認真聽講,而且還自己鑽研。有一次,老師在課上講了一種特殊的四位整數,這種整數有兩個特性:
第一,它是某一個自然數的平方;
第二,它的千位數字與十位數字之和等於百位數字與個位數字之積。
然後老師就舉了一個例子:1156,1156是34的平方,且1156的千位數字1加上十位數字5等於百位數字1乘以個數數字6,即1+5=1*6。
然後老師告訴同學,這是最小的一個符合以上兩個特性的四位整數,接着老師就留下了作業,要讓同學們回家後儘量多的找出符合這兩個特性的特殊四位數。明明回家後,就開始找了起來,1157、1158、1159、……、3136,直到到了3136(3136=5656,3+3=16),明明才找到了第二個這樣的特殊四位數。明明覺得這樣找下去不是辦法,後面還有好幾千個數字要一個一個試下來,這樣一定無法在睡覺前完成。於是明明就求助於你,幫他寫一個程序,從小到大求出所有的這樣的特殊四位數,然後當明明想要第幾個這樣的特殊四位數時,你就能夠很快的告訴他。 如果把上述所有的特殊四位數按從小到大的順序排列後記爲S1,S2,…,Sn,…,即排在第1個位置上的特殊四位數記爲S1,排在第2個位置上的特殊四位數記爲S2,…,排在第n個位置上的特殊四位數記爲Sn,那麼明明的問題可以歸結爲:假如一個特殊四位數排在第n個位置上,那麼這個特殊四位數Sn等於多少呢?
輸入說明 :
你寫的程序要求從標準輸入設備中讀入測試數據作爲你所寫程序的輸入數據。標準輸入設備中有多組測試數據,每組測試數據僅佔一行,每行僅有一個正整數n(n不大於特殊四位數的個數),表示要求第n個特殊四位數Sn。每組測試數據與其後一組測試數據之間沒有任何空行,第一組測試數據前面以及最後一組測試數據後面也都沒有任何空行。
輸出說明 :
對於每一組測試數據,你寫的程序要求計算出一組相應的運算結果,並將這一組運算結果作爲你所寫程序的輸出數據依次寫入到標準輸出設備中。每組運算結果爲一個正整數,表示與輸入數據n相對應的那個特殊四位數Sn,每組運算結果單獨形成一行數據,其行首和行尾都沒有任何空格,每組運算結果與其後一組運算結果之間沒有任何空行,第一組運算結果前面以及最後一組運算結果後面也都沒有任何空行。 注:通常,顯示屏爲標準輸出設備。
輸入範例 :
1
2
輸出範例 :
1156
3136
c源碼:
#include<stdio.h>
int main()
{
int i,j,x,y,n,m,a[1000]={0},t,b[4]={0};
while(scanf("%d",&n)!=EOF)
{ x=1156;
m=0;
while(x<10000)
{ t=0;
memset(b,0,4);
for(i=34;i<100;i++)
{
if((i*i)==x)
t=1;
}
if(t==1)
{
y=x;
for(j=0;j<4;j++)
{
b[j]=y%10;
y=y/10;
}
}//if t
if((b[3]+b[1])==(b[2]*b[0]))
{ a[m]=x;
m++;
}
x++;
}//x
if(n<=m)
printf("%d\n",a[n-1]);
}
return 0;
}