N的所有倍数为3或5的总和

时间:2015-07-02 03:21:54

标签: java sum challenge-response

我必须找到N以下3或5的所有倍数的总和。 例如,如果我们必须列出10以下3或5的倍数的所有自然数,我们得到3,5,6和9,这些倍数的总和是23。

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

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

5 个答案:

答案 0 :(得分:1)

我建议您使用Scanner。我还建议您以sum的增量从3迭代到n来添加3。然后从5n5为增量(然后排除3的倍数,因为它们已被添加)。像

这样的东西
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);
    }
}

答案 1 :(得分:0)

将你的print语句移出循环。

在循环之前,

long[] sumArr = new long[Nbr];

内循环,

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

循环后,

for (long sum : sumArr) {
    System.out.println(sum);
}

答案 2 :(得分:0)

如果你想先读取所有的Ns,那么读取它们并将它们放入一个数组然后尝试找到总和

答案 3 :(得分:0)

您可以制作ArrayList并将总和添加到其中,然后在循环后打印

答案 4 :(得分:0)

正如我们所知,我们需要将那些可被3或5整除的数字加在一起,其中n = 10或100或更大(这是极限)。但是如果我们有n = 20那么15(15%5 == 0&amp; 15%3 == 0)将会两次,所以我们只需要添加一次,这样我们就需要检查一个数字是否可被15整除(自5 * 3 = 15)。

   long n1=0,n2=0;
    int i=1,j=1;
    while(3*i<n)
        {
        n1 +=3*i;
        i++;
        if(5*j<n)
            {
            n2+=5*j;
            if(5*j%15==0)
                n2 -=5*j;
            j++;
        }
      }

    System.out.println(n1+n2);
    }