-2

我比较新鲜,周五刚接受了我的第一次面试。

在机器测试中,他们要求我编写一个程序来添加前十个数字,即 1-10,而不使用任何 for 循环。我尝试了很多,但找不到解决方案。我们如何编写程序逻辑来获得前 10 个自然数的总和而不使用 for 循环。

4

7 回答 7

3

如果他们要求您不要使用 for 循环,那么您可以使用 while 或 do while。如果您不想使用任何 knd 循环,还有另一种方法。您可以使用公式 1+2+3+.........+(n-1)+n=(n* (n+1))/2

你必须添加前 10 个数字,这样你就可以像这样使用它

(10*(10+1))/2。

Console.WriteLine("{0}",(10*(10+1))/2);

您可以通过询问用户 n 等的值来使其更通用。我希望这会对您有所帮助。

于 2013-01-14T05:53:24.750 回答
2

自然数是算术级数的特例。任何算术级数的总和都可以用一个简单的公式计算出来,而不需要循环。

S = (n / 2) * (a 1 + a n )

就个人而言,我认为面试官期望你只记住这个公式是不公平的。但是,您可能会通过阅读该系列并自己弄清楚公式给面试官留下深刻印象!

于 2013-01-14T05:54:21.720 回答
2

如果我理解你所说的正确,你可以使用简单的数学。

x = firstnaturalnumber;

你想拥有:

(x + 0) + (x + 1) + (x + 2) ... (x + 9)

自然数是整数,这在数学上是合理的。最后的等式是:

sum = 10x + 45
于 2013-01-14T05:55:54.360 回答
1

如果他们指定不使用“for”循环,那么还有其他可用的循环,例如 do-while 或 while。递归函数也是一个不错的选择。

实际上,他们已经指定了要添加的数字。所以,不要成为一个聪明的笨蛋,而是使用“+”直接添加它们。是的,我是一个愚蠢的答案,但这是一个答案。

于 2013-01-14T05:58:36.427 回答
1
static void Main(string[] args) {
    Console.WriteLine("{0}", SumRecursive(1,10));
}

static int SumRecursive(int min, int max) {
    return _SumRecursive(min, max);
}


static int _SumRecursive(int min, int val) {
    if (val == min)
        return val;
    return val + _SumRecursive(min, val - 1);
}
于 2013-01-14T06:00:06.050 回答
1

可以用递归方法实现,也没有for循环

public int AddDown(int i)
{
    return i += (i >= 1 ? AddDown(--i) : 0);
}
于 2013-01-14T06:04:21.457 回答
1

x= 1 + 2 + 3+.....+n-2 +n-1+n

x =n +n-1+ n-2+ ....3+2 +1 只是倒车

总结双方

2x= (n+1) +(n+1) +(n+1)+ .....+(n+1) ///n 次

2x= n(n+1)

x= n(n+1)/2

所以在你的情况下 x= 10(10+1)/2 = 55

于 2013-01-14T06:19:23.477 回答