Java 使用方法计算3和5的倍数之和:不正确的和
我一直在尝试用Java中的“方法”解决ProjectEuler问题1。它给出了正确的倍数。然而,总的来说是不对的。这是我的密码: 方法类:Java 使用方法计算3和5的倍数之和:不正确的和,java,Java,我一直在尝试用Java中的“方法”解决ProjectEuler问题1。它给出了正确的倍数。然而,总的来说是不对的。这是我的密码: 方法类: package lessons; public class method { int a,b, add; public void multipleThree() { for (a=3; a<1000; a+=3) { System.out.println(a);
package lessons;
public class method {
int a,b, add;
public void multipleThree()
{
for (a=3; a<1000; a+=3)
{
System.out.println(a);
}
}
public void multipleFive(){
for (b=5; b<1000; b+=5)
{
System.out.println(b);
}
}
public void sum(){
add= a+b;
System.out.println("The sum is "+ add);
}
}
有什么帮助吗?相应地,
multipleThree()
和multipleFive()
的输出是999和995。但是,a
和b
在for
循环中又增加一次,以满足退出条件,因此它们的总和是2002,而不是1994
您可以将sum()
更改为
public void sum(){
add = a + b - 8;
System.out.println("The sum is "+ add);
}
a+b
计算一次-在循环之外。结果将是a
和b
的最终值之和。如果要对每个循环中的每个元素求和,则需要在循环内更新add
:
public class method {
int add = 0;
public void multipleThree() {
for (int a=3; a<1000; a+=3) {
System.out.println(a);
add += a;
}
}
public void multipleFive(){
for (int b=5; b<1000; b+=5) {
System.out.println(b);
add += b;
}
}
public void sum(){
System.out.println("The sum is "+ add);
}
}
公共类方法{
int add=0;
公共void multipleThree(){
对于(int a=3;a检查下面的
package lessons;
public class method {
int a,b, add;
public void multipleThree()
{
for (a=3; a<1000; a+=3)
{
System.out.println(a);
}
a=a-3;//added this
}
public void multipleFive(){
for (b=5; b<1000; b+=5)
{
System.out.println(b);
}
b=b-5;//added this
}
public void sum(){
add= a+b;
System.out.println("The sum is "+ add);
}
}
套装课程;
公共类方法{
int a、b、add;
公共void multipleThree()
{
对于(a=3;a分别声明变量
class method {
int i, j, add;
public void multipleThree() {
for (int a = 3; a < 1000; a = a + 3) {
System.out.println(a);
i = a;
}
}
public void multipleFive() {
for (int b = 5; b < 1000; b = b + 5) {
System.out.println(b);
j = b;
}
}
public void sum() {
add = i + j;
System.out.println("The sum is " + add);
}
类方法{
int i,j,add;
公共void multipleThree(){
对于(int a=3;a<1000;a=a+3){
系统输出打印项次(a);
i=a;
}
}
public void multipleFive(){
对于(int b=5;b<1000;b=b+5){
系统输出打印ln(b);
j=b;
}
}
公帑{
加法=i+j;
System.out.println(“总和为”+add);
}
}
这是解决给定问题的最佳方法,通过了所有测试用例。快乐编码你说它没有给出正确的和是什么意思。预期的o/p是多少,你得到了什么?你在哪里为a,b设置了初始值?你得到了正确的倍数,因为a,b在循环中初始化,但在和方法中不是这样。希望你是这样明白我的意思了。你希望从这个程序中得到什么。请先消除冲突。希望你应该学习并尝试这个
关键字。这可能会对你有所帮助。顺便说一下,你的代码会编译得很好,但你没有初始化gloabal变量a和b
。因此,这个
关键字会帮助你。谢谢你没有谢谢大家,我知道我的错误。P和Q计算3和5乘积R来计算15的乘积,如一个例子,其中30是可被3和5除除的,它是两次,所以我从所得的总和中减去SUM3。这是OP问题的答案,你可以用一种方法减少重复,方法是long sum(int n,int m){long p=(n-1)/m;return(p*((m*2)+(p-1)*m))/2;}
。
class method {
int i, j, add;
public void multipleThree() {
for (int a = 3; a < 1000; a = a + 3) {
System.out.println(a);
i = a;
}
}
public void multipleFive() {
for (int b = 5; b < 1000; b = b + 5) {
System.out.println(b);
j = b;
}
}
public void sum() {
add = i + j;
System.out.println("The sum is " + add);
}
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Solution {
public static void main(String[] args) {
Scanner z = new Scanner(System.in);
int N = z.nextInt();
while(N!=0)
{
long number = z.nextInt();
long p = (number-1)/3;
long sum1 = (p*(6+((p-1)*3)))/2;
long q = (number-1)/5;
long sum2 = (q*(10+((q-1)*5)))/2;
long r = (number-1)/15;
long sum3 = (r*(30+((r-1)*15)))/2;
System.out.println(sum1+sum2-sum3);
}
}
}