While循环C#中的金字塔图案

时间:2019-11-11 14:04:22

标签: c#

我必须创建一个程序来打印金字塔图案(1 2 33 44 555 666 ...)并对数字求和。

这是我的解决方法:

static void Main(string[] args)
{
    int i, j;
    i = 1;

    int sum = 0;
    while (i < 9)
    {
        for (j = 1; j <= i; j+=2)
        {

            Console.Write(i);
        }
        Console.Write("\n");
        sum += i;
        i++;

    }
    Console.WriteLine("Summary: " + sum);
    Console.ReadLine();
}

我的输出:

enter image description here

我在这里做错了什么(错误的摘要)?

3 个答案:

答案 0 :(得分:2)

这是您代码的优化且有效的版本:

    int sum = 0;
    for (int i = 1; i < 9; i++)
    {
        int current = 0;
        for (int j = 1; j <= i; j += 2)
        {
            Console.Write(i);
            current = 10 * current + i;
        }
        Console.WriteLine();
        sum += current;
    }
    Console.WriteLine("Summary: " + sum);

主要问题是,您仅捕获i(正在打印的整数)的值,并使用该值来计算摘要。如此处所示,在嵌套循环中捕获(针对整行)当前值,然后将其添加到摘要中以提供期望的结果。

HTH

答案 1 :(得分:0)

请找到不是优化的快速解决方案

        int i, j;
        i = 1;

        int sum = 0;
        while (i < 9)
        {
            int current = 0;
            for (j = 1; j <= i; j += 2)
            {
                current = 10 * current + i;
                Console.Write(i);
            }
            Console.Write("\n");
            sum += current;
            i++;
        }
        Console.WriteLine("Summary: " + sum);
        Console.ReadLine();

答案 2 :(得分:0)

仅对您的代码进行少量调整。

/Index

如果您想扩展代码以让用户选择一个号码,您可以这样做:

代替此行:

static void Main(string[] args)
{
    int i, j;
    i = 1;

    int sum = 0;
    while (i <= 9)
    {
        for (j = 0; j <= i - 1; j++)
        {
            Console.Write(i);
            sum += i * (int)Math.Pow(10, j);
        }

        Console.WriteLine();
        i++;
    }

    Console.WriteLine("Sum: " + sum);
    Console.ReadLine();
}

您可以这样做:

while (i <= 9)