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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值