我比较新鲜,周五刚接受了我的第一次面试。
在机器测试中,他们要求我编写一个程序来添加前十个数字,即 1-10,而不使用任何 for 循环。我尝试了很多,但找不到解决方案。我们如何编写程序逻辑来获得前 10 个自然数的总和而不使用 for 循环。
如果他们要求您不要使用 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 等的值来使其更通用。我希望这会对您有所帮助。
自然数是算术级数的特例。任何算术级数的总和都可以用一个简单的公式计算出来,而不需要循环。
S = (n / 2) * (a 1 + a n )
就个人而言,我认为面试官期望你只记住这个公式是不公平的。但是,您可能会通过阅读该系列并自己弄清楚公式给面试官留下深刻印象!
如果我理解你所说的正确,你可以使用简单的数学。
x = firstnaturalnumber;
你想拥有:
(x + 0) + (x + 1) + (x + 2) ... (x + 9)
自然数是整数,这在数学上是合理的。最后的等式是:
sum = 10x + 45
如果他们指定不使用“for”循环,那么还有其他可用的循环,例如 do-while 或 while。递归函数也是一个不错的选择。
实际上,他们已经指定了要添加的数字。所以,不要成为一个聪明的笨蛋,而是使用“+”直接添加它们。是的,我是一个愚蠢的答案,但这是一个答案。
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);
}
可以用递归方法实现,也没有for循环
public int AddDown(int i)
{
return i += (i >= 1 ? AddDown(--i) : 0);
}
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