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

我的代码可以在Eclipse上运行,但是我得到了“很好的尝试,但是您没有通过此测试用例”。使用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);
}


}

现在剩下的唯一问题是我希望它能够读取所有数字,然后显示总和,因为现在它读取一个数字并在其后立即显示总和,有什么想法吗?

最佳答案

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

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


该语句说:i必须被35整除,并且不能被35整除。改写:i必须可以被35整除,但不能同时被它们所整除。只需删除第二行即可。

关于java - N以下3或5的所有倍数的总和。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31172993/

10-10 21:39