aabb 完全平方數

problem

輸出所有aabb的四位完全平方數(即前兩位數字相等,後兩位數字也相等)

solution

method1

第一次看到這個問題是這麼想的

for ( int i = 1000 ; i < 10000 ; i++ )
{
    if( (千位數 == 百位數) && (十位數 == 個位數) && (i開根號為整數) )
        printf("%d",i);
}

但是這樣的解法迴圈就要跑9000次,並且要另外寫函數把每一位字都求出來,太過於麻煩。

method2

我們看看第二種想法,仔細想想 aabb = a * 1100 + b * 11 , a有19的可能性,b有09的可能性,用雙層迴圈去組合所有的可能,在判斷開根號是否為正整數

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 劉汝佳

你可能感兴趣的:(aabb 完全平方數)