跳转至

循环专项练习#

本练习覆盖:图形打印(* 三角形/菱形)、回文数、质数、完美数、水仙花数、FizzBuzz。基础语法见 循环结构循环嵌套

一、图形打印(星号三角形系列)#

输入行数 num,打印多种三角形与菱形图案。核心思路:外层循环控制行,内层循环控制空格与 * 数量。

1. 倒直角三角形#

Console.WriteLine("输入行数:");
int num = int.Parse(Console.ReadLine());

for (int i = 1; i <= num; i++)            // 行
{
    for (int j = num; j >= i; j--)        // 每行 num-i+1 个 *
    {
        Console.Write("*");
    }
    Console.WriteLine();
}

2. 右对齐正三角形#

for (int i = 1; i <= num; i++)
{
    for (int j = num; j > i; j--)       // 先打印空格
    {
        Console.Write(" ");
    }
    for (int j = 1; j <= i; j++)        // 再打印 *
    {
        Console.Write("*");
    }
    Console.WriteLine();
}

3. 右对齐倒三角形#

for (int i = 1; i <= num; i++)
{
    for (int j = 1; j < i; j++)         // 空格递增
    {
        Console.Write(" ");
    }
    for (int j = num; j >= i; j--)      // * 递减
    {
        Console.Write("*");
    }
    Console.WriteLine();
}

4. 等腰三角形(金字塔)#

for (int i = 1; i <= num; i++)
{
    for (int j = num; j > i; j--)       // 左侧空格
    {
        Console.Write(" ");
    }
    for (int j = 1; j < i * 2; j++)     // 2*i-1 个 *
    {
        Console.Write("*");
    }
    Console.WriteLine();
}

5. 倒金字塔#

for (int i = 1; i <= num; i++)
{
    for (int j = 1; j < i; j++)
    {
        Console.Write(" ");
    }
    for (int j = num * 2; j >= i * 2; j--)
    {
        Console.Write("*");
    }
    Console.WriteLine();
}

6. 菱形#

// 上半部分
for (int i = 1; i <= num / 2; i++)
{
    for (int j = num / 2; j > i; j--) { Console.Write(" "); }
    for (int j = 1; j < i * 2; j++)   { Console.Write("*"); }
    Console.WriteLine();
}
// 下半部分
for (int i = 1; i <= num; i++)
{
    for (int j = 1; j < i; j++)       { Console.Write(" "); }
    for (int j = num; j >= i * 2; j--) { Console.Write("*"); }
    Console.WriteLine();
}

二、回文数#

判断 1 到 10000 中有多少个回文数(正着读与倒着读相同,如 121、1221、12321)。

int a = 0;
for (int i = 1; i < 100; i++)
{
    for (int j = 1; j < 100; j++)
    {
        if (i == j && j <= 9)
        {
            Console.WriteLine(i * 10 + j);   // 两位数回文:11, 22, ..., 99
            a++;
        }
        if (i == j && j >= 10)
        {
            Console.WriteLine(i * 10 + j / 10);  // 三位数回文:101, 111...
            a++;
        }
        // ...(更多位数处理)
    }
}
Console.WriteLine($"1 到 10000 中,回文数有:{a}个");

三、质数相关#

1. 判断一个数是否是质数#

Console.WriteLine("输入一个数");
int num1 = Convert.ToInt32(Console.ReadLine());
int flag = 0;

for (int i = 2; i <= num1; i++)
{
    if (num1 % i == 0)
    {
        flag++;
    }
}
if (flag <= 2 && num1 != 1)
{
    Console.WriteLine($"{num1}是质数");
}
else
{
    Console.WriteLine($"{num1}不是质数");
}

优化思路:判断质数只需循环到 sqrt(n) 即可,不需要循环到 n。

2. 打印 1 到 100 的所有质数#

for (int i = 2; i <= 100; i++)
{
    int flag2 = 0;
    for (int j = 1; j <= i; j++)
    {
        if (i % j == 0)
        {
            flag2++;
        }
    }
    if (flag2 <= 2)
    {
        Console.WriteLine($"{i}是质数");
    }
}

四、完美数#

完美数:因子(除自身外)之和等于自身的数,如 6 = 1+2+3。

1. 判断一个数是否是完美数#

Console.WriteLine("输入");
int num2 = Convert.ToInt32(Console.ReadLine());
int flag3 = 0;
for (int i = 1; i < num2; i++)
{
    if (num2 % i == 0)
    {
        flag3 += i;   // 累加所有因子
    }
}
if (flag3 == num2)
{
    Console.WriteLine($"{num2}是完美数");
}
else
{
    Console.WriteLine($"{num2}不是完美数");
}

2. 打印 1 到 1000 的所有完美数#

for (int i = 1; i <= 1000; i++)
{
    int flag4 = 0;
    for (int j = 1; j < i; j++)
    {
        if (i % j == 0)
        {
            flag4 += j;
        }
    }
    if (flag4 == i)
    {
        Console.WriteLine($"{i}是完美数");
    }
}

五、水仙花数(阿姆斯特朗数)#

水仙花数:一个三位数各位数字的立方和等于其本身,如 153 = 1³+5³+3³。

// 判断一个数是否是水仙花数
Console.WriteLine("输入数字:");
int number = Convert.ToInt32(Console.ReadLine());
int single = number % 10;          // 个位
int ten = number % 100 / 10;       // 十位
int hundred = number / 100;        // 百位
if (single * single * single + ten * ten * ten + hundred * hundred * hundred == number)
{
    Console.WriteLine($"{number}是阿姆斯特朗数");
}
else
{
    Console.WriteLine($"{number}不是阿姆斯特朗数");
}

// 打印 1 到 1000 的所有水仙花数
for (int i = 100; i < 1000; i++)
{
    int single1 = i % 10;
    int ten1 = i % 100 / 10;
    int hundred1 = i / 100;
    if (Math.Pow(single1, 3) + Math.Pow(ten1, 3) + Math.Pow(hundred1, 3) == i)
    {
        Console.WriteLine($"{i}是阿姆斯特朗数");
    }
}

六、FizzBuzz#

输出 1-100:能被 3 整除输出 Fizz,能被 5 整除输出 Buzz,同时整除输出 FizzBuzz,否则输出数字。

for (int i = 1; i <= 100; i++)
{
    if (i % 3 == 0 && i % 5 == 0)
    {
        Console.WriteLine("FizzBuzz");
    }
    else if (i % 3 == 0)
    {
        Console.WriteLine("Fizz");
    }
    else if (i % 5 == 0)
    {
        Console.WriteLine("Buzz");
    }
    else
    {
        Console.WriteLine(i);
    }
}

相关笔记#