[英]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
由迭代3
至n
在增量3
。 Then from 5
to n
in increments of 5
(then exclude the multiples of 3
, because they've already been added). 然后,从
5
至n
增量为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.