0

だから私は Project Euler チャレンジをやっていて、最初のチャレンジで立ち往生しています。私は Java を pl として使用しています。たとえば、3 または 5 の倍数である 10 未満の自然数をすべてリストする必要がある場合、3、5、6、および 9 が得られます。これらの倍数の合計は 23 です。 N より 3 または 5 低い。

私のコードは Eclipse で動作しますが、「いい試みですが、このテスト ケースに合格しませんでした」というメッセージが表示されます。with stdout : No Response で、コードを送信すると、すべてのテスト ケースで間違った回答が返されます。コードは次のとおりです。

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

}

今残っている唯一の問題は、すべての数字を読み取ってから合計を表示できるようにしたいということです。今のところ、1 つの数字を読み取り、その直後に合計を表示します。何かアイデアはありますか?

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の言ったこととワザーアップの組み合わせだと思います。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 に答える