N以下所有3或5的倍数之和
The sum of all the multiples of 3 or 5 below N
我必须求出 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);
}
}
将打印语句移到循环外。
循环之前,
long[] sumArr = new long[Nbr];
内部循环,
sumArr[j] = Somme(Long.parseLong(numbers[j]));
循环后,
for (long sum : sumArr) {
System.out.println(sum);
}
如果你想先读取所有 N,然后读取它们并将它们放入数组中,然后尝试找到总和
你可以制作 ArrayList
并将总和添加到它然后在循环后打印它
我建议你使用 Scanner
。我还建议您通过以 3
的增量从 3
迭代到 n
来添加到 sum
。然后从 5
到 n
以 5
为增量(然后排除 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);
}
}
正如我们所知,我们需要对 n 以下可被 3 或 5 整除的数字求和,其中 n=10 或 100 或更多(这是极限)。但是如果我们有 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);
}
我必须求出 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);
}
}
将打印语句移到循环外。
循环之前,
long[] sumArr = new long[Nbr];
内部循环,
sumArr[j] = Somme(Long.parseLong(numbers[j]));
循环后,
for (long sum : sumArr) {
System.out.println(sum);
}
如果你想先读取所有 N,然后读取它们并将它们放入数组中,然后尝试找到总和
你可以制作 ArrayList
并将总和添加到它然后在循环后打印它
我建议你使用 Scanner
。我还建议您通过以 3
的增量从 3
迭代到 n
来添加到 sum
。然后从 5
到 n
以 5
为增量(然后排除 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);
}
}
正如我们所知,我们需要对 n 以下可被 3 或 5 整除的数字求和,其中 n=10 或 100 或更多(这是极限)。但是如果我们有 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);
}