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