编写一个接受int n的函数并返回奇数小于n的和

时间:2011-02-23 21:48:34

标签: java algorithm sum

这是我的代码

public static int sumOfOddLessThan(int n)
{
    int iResult = 0;
    for(int i = n - 1; i > 0 && i % 2 != 0; i--)
    {
        iResult = iResult + i;
    }
    return iResult;
}

它无法正常工作,我不知道为什么:\

当我输入5时它应该返回4但它返回0

6 个答案:

答案 0 :(得分:4)

你在for循环中的条件是:

i is greater than 0 and i is not even

当你用5作为参数调用方法时,i的第一个值将是4,这是偶数,因此循环不会被评估。

for(i = n-1; i > 0; i++) {
    if(i%2==0) {
        iResult += i;
    }
}

答案 1 :(得分:2)

你将条件i % 2 != 0置于for循环中而不是循环内的if,因此即使它在整个循环中突破也不会满足。

您的代码应如下所示:

public static int sumOfOddLessThan(int n)
{
    int iResult = 0;
    for(int i = n - 1; i > 0; i--)
    {
        if(i % 2 != 0) {
            iResult = iResult + i;
        }
    }
    return iResult;
}

然后你甚至不需要一个循环,你可以通过获得低于N的奇数的数量并将其平方来直接评估它。

答案 2 :(得分:2)

你应该修改用于添加系列的论坛,你要做的就是修改它

<强>较早

int i = (n+1)/2;
return (i*i)

<强>修饰

int i = n/2;
return (i*i);

<强> TEST 输入1: 返回0;

输入2: 返回1;

输入3: 返回1;

输入4: 返回4;

输入5: 返回4;

输入6: 返回9;

依旧......

答案 3 :(得分:1)

for循环的第二部分是一个延续条件。在您的情况下,您的续约条件为i > 0 && i % 2 != 0

对于n = 5,第一个i是4,而4%2是0.你的连续条件不满足,这就是你的for循环在开始之前退出的原因。

尝试

    for(int i = n - 1; i > 0; i--)
    {
        if (i % 2 != 0)
        {
            iResult = iResult + i;
        }
    }

答案 4 :(得分:0)

问题是当for中的条件为false时,循环退出。

因此对于5,i=4i % 2 != 0为false,因此根本不会访问循环。

请改为尝试:

for(i=((n-1)%2==0?n-2:n-1 ; i>0; i=i-2)
{   
     i > 0 && i % 2 != 0; 
}

请注意,通过在每个步骤中从i减少2,您不必在每个循环上检查奇偶校验。

答案 5 :(得分:0)

首先你将i设置为n-1,所以如果n为5则为4,那么你在for循环上的条件表明我必须是奇数,其中4不是,所以它甚至不做环。试试这个:

public static int sumOfOddLessThan(int n)
{
    int iResult = 0;
    for(int i = n-1; i > 0; i--)
    {
        if (i % 2 != 0) iResult += i;
    }
    return iResult;
}