我决定尝试一下这个小例子,就像显示的例子一样只有10个。
如果我们列出10以下的所有自然数是3或5的倍数,我们得到3,5,6和9。这些倍数的总和是23.
查找低于1000的3或5的所有倍数的总和。
public class project1 {
public static void main(String[] args) {
int three=0;
int tot3=0;
int five=0;
int tot5=0;
int total;
while (tot3<10) {
three+=3;
tot3=tot3+three;
};
while (tot5<10) {
five+=5;
tot5=tot5+five;
};
total=tot3+tot5;
System.out.println("Three's: " + tot3);
System.out.println("Five's: " + tot5);
System.out.println("Combined: " + total);
}
}
我的输出显示为:
三个:18
五:15 合并:33
答案 0 :(得分:3)
3和5的倍数(例如15)的数字被计算两次 - 每次循环一次。
答案 1 :(得分:1)
while (tot3<10) {
three+=3;
tot3=tot3+three;
};
我认为你的意思是
while (tot3<10) {
three += tot3; // Add this multiple of 3 to the total.
tot3+=3; // increment the "next multiple"
}
(同样为5)
孤星也很重要 - 你需要在“5”循环中添加逻辑来检查它是否已经计入3循环中。 mod(%)运算符可以帮助那里。
答案 2 :(得分:1)
首先,
while (tot3<10) {
three+=3;
tot3=tot3+three;
};
while (tot5<10) {
five+=5;
tot5=tot5+five;
};
这应该是
while (three<10) {
three+=3;
tot3=tot3+three;
};
while (five<10) {
five+=5;
tot5=tot5+five;
};
因为您担心何时开始计算10以上的数字,而不是当这些数字的总数超过10时。
其次,您的解决方案将计算三次和五次的倍数。例如,15将被添加两次。了解模运算符%
,以便为此提供解决方案(例如,如果five % 3 == 0
,则不会向tot5计数中添加五个
答案 3 :(得分:1)
我建议使用模块化运算符来解决这个问题。在java%中将允许您执行模运算。例如,3的任何倍数,例如9%3 = 0而9%2 = 1.可以认为将第一个数除以第二个数后剩下的数。由该数字修改的数字的所有倍数将返回零。
答案 4 :(得分:1)
通过循环跟踪您的变量,您将看到问题: 对于tot3
您正在跟踪总和,而不是跟踪倍数。
部分解决了这个问题而(3&LT; 10)
再一次,通过循环跟踪变量,你会发现这是错误的 - 它会在12处而不是9处停止。将其更改为
虽然(3&10 9) //即限制之前的最后一个可分数,或者如果它可以被整除的那个限制(在5的情况下)
所有人都说,一个无限更优雅的解决方案将涉及模数和一个很好的小if语句。我希望这有帮助!
答案 5 :(得分:0)
public class project1 {
public static void main(String[] args) {
int number = 0;
int total = 0;
while (number < 10) {
System.out.println(number);
if ((number % 3) == 0) {
System.out.println(number + " is a multiple of 3");
total = total + number;
}
else if ((number % 5) == 0) {
System.out.println(number + " is a multiple of 5");
total = total+number;
}
number++;
}
System.out.println("total = "+ total);
}
}
看看我有多慢,我和其他人做了大致相同的事情,但换成了模数函数。模数函数给出了将第一个数除以第二个数的余数(int),并且可以与另一个整数进行比较。在这里,我用它来检查当前数字是否可以被3或5直接整除,如果值为真,则将其加到总数中。
答案 6 :(得分:0)
import java.util.*;
public class Solution {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int t = in.nextInt();
for(int a0 = 0; a0 < t; a0++){
long n = in.nextLong()-1;
System.out.println((n-n%3)*(n/3+1)/2 + (n-n%5)*(n/5+1)/2 - (n-n%15)*(n/15+1)/2);
}
}
}