problem
輸出所有aabb的四位完全平方數(即前兩位數字相等,後兩位數字也相等)
solution
method1
第一次看到這個問題是這麼想的
for ( int i = 1000 ; i < 10000 ; i++ )
{
if( (千位數 == 百位數) && (十位數 == 個位數) && (i開根號為整數) )
printf("%d",i);
}
但是這樣的解法迴圈就要跑9000次,並且要另外寫函數把每一位字都求出來,太過於麻煩。
method2
我們看看第二種想法,仔細想想 aabb = a * 1100 + b * 11
, a有1~9的可能性,b有0~9的可能性,用雙層迴圈去組合所有的可能,在判斷開根號是否為正整數
for ( int a = 1 ; a <= 9 ; a++ )
for ( int b = 0 ; b <= 9 ; b++ )
{
n = a * 1100 + b * 11;
m=sqrt(n);
if(m為整數)
printf("%d",n);
}
method3
用一個變數x
從一開始取平方(迴圈),當x取平方在1000~9999之間時,判斷此數的1.千位數是否等於百位數且2.千位數是否等於百位數,如果兩條件皆成立,則輸出
for(int x = 1; ; x++ )
{
n = x * x
if( n < 1000 )
conitue;
if(n > 9999)
break;
if(千位數 == 百位數 && 千位數 == 百位數)
printf("%d",n);
}
節錄自-提升程式設計的邏輯思考力 by 劉汝佳