Home [C# 筆記] 水仙花數(三位數)
Post
Cancel

[C# 筆記] 水仙花數(三位數)

所謂的「水仙花數」是指一個三位數,其每個位數的立方和等於該數字本身。

例如: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³
  • 判斷是否為水仙花數(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();
This post is licensed under CC BY 4.0 by the author.