問題重述:
[ 1024,2401; 1089,9801; 1296,2916; 1296,9216; 1369,1936; 1764,4761; 2916,9216; 4096,9604 ]
上述數對是1000~9999 的平方數,他們4個位數上所用到的數字是一樣的。
問題分析:
1000~9999所有的平方數對應的平方根範圍是32~99,二重遍歷32~99,找出符合規則的數對(x != y),列印。
偽**的框架可以簡化為:
i : 32 -> 99
j : i+1 -> 99
//相應的規則符合即列印i ,j
乙個錯誤的想法:
按照上述偽**框架,找出規則為解題的關鍵:
最初的錯誤想法是:
將 平方數 的4位數每一位數的和&積(除去0)求出來,都相等的即為符合的規則
結果:多出來這樣的數對:
後來仔細考慮發現 忽略了4平方位數的合數字的質因數或者因數 可能在另一4位平方數上佔據多位(有點繞口,但看上述三個特例就清楚了)
為了交流學習,錯誤**如下:
#include int numbersum(int num)
return sum;
}int numberadd(int num)
return sum;
}int main()
}} }
return 0;
}
正確的思路:將平方數的每一位放入陣列,並對陣列按公升序或者降序排序後,對兩個陣列按位比較。
**如下:
#include using namespace std;
int cmp(const void*a,const void*b)
//將每一位數字存入陣列
void getnumber(int num,int a)
}//按位比較兩個陣列的每一位數字
int compare(int a,int b)
else
continue;
} if(count == 4)
return 1;
else
return 0;
}int main()
{ int i;
int j;
int a[4];
int b[4];
for (i = 32 ;i < 100; i++)
{ getnumber(i*i,a);
qsort(a,4,sizeof(a[0]),cmp);//排序
for(j= i+1 ;j< 100; j++)
{ getnumber(j*j,b);
qsort(b,4,sizeof(b[0]),cmp);//排序
if(compare(a,b))
{cout << "{"執行結果如下:
輸出四位完全平方數 leetcode279 go
給定正整數 n,找到若干個完全平方數 比如 1,4,9,16,使得它們的和等於 n。你需要讓組成和的完全平方數的個數最少。示例 1 輸入 n 12 輸出 3 解釋 12 4 4 4.示例 2 輸入 n 13 輸出 2 解釋 13 4 9.1 動態規劃 時間複雜度o n 3 2 空間複雜度o n 2 ...
判別四位平方數以及floor函式用法
1.輸出形如aabb的所有四位平方數 直接列舉,a從1到9,b從0到9,表示出形如aabb的所有四位數很容易,但是判別是平方數,需要用到floor函式 2.floor函式 函式名 floor 功 能 返回小於或者等於指定表示式的最大整數 用 法 double floor double x 標頭檔案 ...
python 判斷四位數的性質
問題描述 3025這個數具有一種獨特的性質 將它平分為二段,即30和25,使之相加後求平方,即 30 25 30 25 恰好等於3025本身。編寫程式判斷輸入的四位數n是否是滿足abcd ab cd ab cd 這樣性質的四位數,是則輸出1,否則輸出0。輸入 乙個四位數n 輸出 1或者0 樣例輸入 ...