我必须创建一个程序来打印金字塔图案(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();
}
我的输出:
我在这里做错了什么(错误的摘要)?
答案 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)