N的所有倍数为3或5的总和。项目欧拉

时间:2015-07-01 22:53:15

标签: java sum multiplication challenge-response

所以我正在进行Project Euler挑战,而且我坚持第一个,我使用Java作为pl。例如,如果我们必须列出10以下3或5的倍数的所有自然数,我们得到3,5,6和9.这些倍数的总和是23。 我们必须找到N以下所有3或5的倍数之和。

我的代码适用于Eclipse,但我得到了#34;很好的尝试,但是你没有通过这个测试用例。"使用stdout:没有响应,当我提交代码时,我得到所有测试用例的错误答案,这里是代码:

public class Solution {
    public static void main(String[] args) {
        for (int j = 0; j < args.length; j++) {
            int N = Integer.parseInt(args[j]);
            if (Somme(N) != 0) {
                System.out.println(Somme(N));
            }
        }
    }

    public static int Somme(int Nn) {
        int s = 0;
        for (int i = 0; i < Nn; i++) {
            if (((i % 3) == 0) || ((i % 5) == 0)
                && !(((i % 3) == 0) && ((i % 5) == 0))) {
                s = s + i;
            }
        }
        return (s);
    }
}

更新: 所以,我看起来更多,事实证明这就是它应该如何完成的:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Solution{
public static void main(String[] args) throws IOException {


    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String line = br.readLine();
    int Nbr = Integer.parseInt(line);


        for(int j=0; j<Nbr;j++)
        {
            BufferedReader br2 = new BufferedReader(new   InputStreamReader(System.in));
            String line2 = br2.readLine();
            String[] numbers = new String[Nbr];
            numbers[j]= line2;
            System.out.println(Somme(Long.parseLong(numbers[j])));
        }

        }


public static long Somme(long Nn) {
    long s = 0;
    for (int i = 0; i < Nn; i++) {
        if (((i % 3) == 0) || ((i % 5) == 0)) {
            s = s + i;
        }
    }
    return (s);
}

}

现在唯一的问题是,我希望它能够读取所有数字然后显示总和,现在它读取一个数字并显示其后的总和,任何想法?

3 个答案:

答案 0 :(得分:2)

您正在跳过一些不应跳过的数字。

if (((i % 3) == 0) || ((i % 5) == 0)
    && !(((i % 3) == 0) && ((i % 5) == 0)))

此声明说:i必须可以被35整除,并且不能被35整除。重述:i必须可以被35整除,但不能同时归为Sub CopyPaste() ' ' CopyPaste Macro ' ' Dim targetRng As Excel.Range Dim destRng As Excel.Range Set targetRng = Range("G4:G33") Dim lc As Long With Excel.ThisWorkbook.Sheets("Sheet1") lc = .Cells(35, .Columns.Count).End(Excel.xlToLeft).Column Set destRng = .Range(.Cells(35, lc), .Cells(35, lc)).Offset(0, 1).Resize(targetRng.Rows.Count, targetRng.Columns.Count) destRng.Value = targetRng.Value End With End Sub 。只需删除第二行即可。

答案 1 :(得分:0)

我认为这是Turing85所说的和wazaaaap的结合。 Project Euler的示例都显示它不需要不同的输入。你只需要产生正确的输出。因此,将render: function() { var style = this.state.submitted ? {{"backgroundColor": "#1abc9c", "opacity": "0.6"}} : {{}}; return ( <div> <h1 className="home-two-question" style={style}>{text}</h1> </div> ) }, 替换为Integer.parseInt(args[j]); 为了补充图灵所说的,解决方案应该遵循以下的伪代码:

Integer.parseInt(1000);

答案 2 :(得分:0)

使用for循环,您可以获得从01000的所有数字,并且通过使用if条件,您可以获得所需的数字,即倍数的35中,将它们相加会得到最终输出,如下所示:

public class SUM_3_5{

    public static void main(String []args) {
        int sum=0;
        int i;

        for(i=0;i<1000;i++)
        {
             if(i%3==0||i%5==0)
                 sum=sum+i;
        }

        System.out.println(sum);
    }
}