所謂的「水仙花數」是指一個三位數,其每個位數的立方和等於該數字本身。
例如:153是一個「水仙花數」,因為 153 = 1³ + 5³ + 3³ 請印出1000以內的所有水仙花數。
分析-使用單迴圈
- 通過迴圈,可以遍歷100~1000以內所有數字(水仙花數,包含100不包括1000)
- 對於每個數字,將個位、十位、百位拆分出來,計算立方和,以及判斷是否與自身一樣,即水仙花數。
1
2
3
4
5
6
7
8
9
10
11
//印出100~1000的水仙花數,包含100不包括1000)
for (int i = 100; i < 1000; i++)
{
int g = i % 10; //取個位數
int s = i / 10 % 10; //取十位數
int b = i / 10 / 10 % 10; //取百位數
int n = b * b * b + s * s * s + g * g * g;//求立方和
if (n == i) Console.WriteLine(i); //印出水仙花數
}
分析-使用巢狀迴圈
- 迴圈遍歷三位數的每一種組合可能性:
- 遍歷百位每一種可能性
for (int i=1; i<=9; i++) {...} - 遍歷十位每一種可能性
for (int j=0; i<=9; j++) {...} - 遍歷個位每一種可能性
for (int k=0; i<=9; i++) {...}- 在個位數的k迴圈裡:
- 計算原來的數字
int num = i*100+j*10+k,n就是100-1000的水仙花數可能性 - 計算立方和
j³+i³+k³
- 計算原來的數字
- 在個位數的k迴圈裡:
- 判斷是否為水仙花數(num與立方和比對)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int n; //記錄立方和
int num; //記錄原來的數字
for (int i = 1; i < 10; i++) //百位所有可能性: 1~9
{
for (int j = 0; j < 10; j++) //十位所有可能性: 0~9
{
for (int k = 0; k < 10; k++) //個位所有可能性: 0~9
{
n = i * i * i + j * j * j + k * k * k; //計算立方和
num = i * 100 + j * 10 + k; //計算原來的數字
if (num == n) Console.WriteLine(num); //印出水仙花數
}
}
}
Console.Read();