简体   繁体   English

N以下3或5的所有倍数之和

[英]The sum of all the multiples of 3 or 5 below N

I have to find the sum of all the multiples of 3 or 5 below N. example if we have to list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9,the sum of these multiples is 23. 我必须找到N之下3或5的所有倍数的总和。例如,如果我们必须列出10以下的所有自然数,它们是3或5的倍数,我们得到3、5、6和9,即这些倍数是23

Now the only problem left is that I want it to be able to read ALL the numbers THEN display the sum, for now it reads one number and display the sum right after it, any ideas? 现在剩下的唯一问题是我希望它能够读取所有数字,然后显示总和,因为现在它读取一个数字并在其后立即显示总和,有什么想法吗?

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

I suggest you use a Scanner . 我建议您使用Scanner I would also suggest you add to a sum by iterating from 3 to n in increments of 3 . 我也建议你添加到sum由迭代3n在增量3 Then from 5 to n in increments of 5 (then exclude the multiples of 3 , because they've already been added). 然后,从5n增量为5 (然后排除的倍数3 ,因为他们已经被添加)。 Something like 就像是

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

Based on your comment below, change main to first read the int of counts, then store them in an array. 根据下面的评论,将main更改为首先读取count的int ,然后将其存储在数组中。 Something like 就像是

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

Move your print statement outside the loop. 将您的打印语句移出循环。

Before loop, 循环前

long[] sumArr = new long[Nbr];

inside loop, 内循环

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

after loop, 循环后

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

如果您想先读取所有N,请先读取它们并将它们放入数组中,然后尝试求和

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

As we know that we need to sum of those numbers which are divisible by 3 or 5 below n where n=10 or 100 or more (it is limit). 众所周知,我们需要将那些可被n分割为3或5的数字相加,其中n = 10或100或更大(这是极限)。 But if we have n=20 so 15(15%5==0 && 15%3==0) will come twice so that we need to add only once so that we need to check a number is divisible by 15(since 5*3=15). 但是如果我们有n = 20,那么15(15%5 == 0 && 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);
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM