有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我必须找到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) 个答案

  1. # 1 楼答案

    如果你想先读取所有的N,那么先读取它们并将它们放入一个数组中,然后再尝试求和

  2. # 2 楼答案

    我建议您使用^{}。我还建议您通过以3为增量从3迭代到n来添加到sum。然后以5的增量从5n(然后排除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);
        }
    }
    
  3. # 3 楼答案

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

  4. # 4 楼答案

    将打印语句移出循环

    在循环之前

    long[] sumArr = new long[Nbr];
    

    内环

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

    循环之后

    for (long sum : sumArr) {
        System.out.println(sum);
    }
    
  5. # 5 楼答案

    正如我们所知道的,我们需要求n=10或100或更多(这是极限)下可被3或5整除的数字之和。但是如果我们有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);
        }