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