0

所以我正在做 Project Euler 挑战,我被困在第一个挑战中,我使用 Java 作为 pl。例如,如果我们必须列出所有小于 10 且是 3 或 5 的倍数的自然数,我们会得到 3、5、6 和 9。这些倍数之和是 23。我们必须找到所有的倍数之和低于 N 3 或 5。

我的代码在 Eclipse 上运行,但我得到“不错的尝试,但你没有通过这个测试用例”。使用标准输出:无响应,当我提交代码时,我在所有测试用例中都得到错误答案,代码如下:

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);
}

}

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

4

3 回答 3

2

You are skipping some numbers that should not be skipped.

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

This statement says: i must be divisible by 3 or 5 AND is must not be divisible by 3 and 5. Rephrased: i must be divisible by 3 or 5, but not both of them. Just delete the second line and it should work.

于 2015-07-01T23:25:31.300 回答
0

我相信这是 Turing85 所说的和 wazaaaap 的结合。Project Euler 的示例都表明它不需要不同的输入。你只需要产生正确的输出。所以替换Integer.parseInt(args[j]);Integer.parseInt(1000); 添加到图灵所说的,解决方案应该遵循以下伪代码:

target=999
sum=0
for i=1 to target do
if (i mod 3=0) or (i mod 5)=0 then sum:=sum+i
output sum
于 2015-07-01T23:31:29.347 回答
0

使用for循环,您可以从0to获取所有数字1000,通过使用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);
    }
}
于 2018-12-03T15:34:27.667 回答