1

N 以下の 3 または 5 のすべての倍数の合計を見つける必要があります。たとえば、3 または 5 の倍数である 10 未満の自然数をすべてリストする必要がある場合、3、5、6、および 9 が得られます。これらの倍数は 23 です。

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

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

5 に答える 5

1

を使用することをお勧めしますScanner。からまでを ずつsum繰り返してに追加することもお勧めします。次に、からの増分で(その後、 の倍数は除外されます。それらは既に追加されているためです)。何かのようなもの3n35n53

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    while (scanner.hasNextInt()) {
        int n = scanner.nextInt();
        System.out.println(getSum(n));
    }
}

public static long getSum(int n) {
    long sum = 0;
    for (int i = 3; i < n; i += 3) {
        sum += i;
    }
    for (int i = 5; i < n; i += 5) {
        if (i % 3 != 0) { // <-- already added if i is divisible by 3
            sum += i;
        }
    }
    return sum;
}

以下のコメントに基づいて、main最初にカウントを読み取りint、次にそれらを配列に格納するように変更します。何かのようなもの

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    while (scanner.hasNextInt()) {
        int toRead = scanner.nextInt();
        int[] vals = new int[toRead];
        for (int t = 0; t < toRead; t++) {
            if (scanner.hasNextInt()) {
                vals[t] = scanner.nextInt();
            }
        }
        StringBuilder sb = new StringBuilder();
        for (int n : vals) {
            sb.append(getSum(n)).append(" ");
        }
        System.out.println(sb);
    }
}
于 2015-07-02T03:35:54.653 に答える
0

print ステートメントをループの外に移動します。

ループ前、

long[] sumArr = new long[Nbr];

ループ内、

sumArr[j] = Somme(Long.parseLong(numbers[j]));

ループの後、

for (long sum : sumArr) {
    System.out.println(sum);
}
于 2015-07-02T03:31:47.260 に答える
0

最初にすべての N を読み取りたい場合は、それらを読み取り、それらを配列に入れてから、合計を見つけてみてください

于 2015-07-02T03:34:09.670 に答える
0

合計を作成ArrayListして追加し、ループの後に印刷することができます

于 2015-07-02T03:34:35.710 に答える