0

我决定尝试获取仅达到 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

4

7 回答 7

3

既是 3 和 5 的倍数(例如 15)的数字会被计算两次 - 每个循环一次。

于 2013-04-10T02:05:49.083 回答
1

通过循环跟踪你的变量,你会发现问题:for tot3

  • =3
  • =9
  • =18
  • =30

您正在跟踪总和,而不是跟踪倍数。这个问题部分解决了

而(三<10)

同样,通过循环跟踪变量,您会发现这是错误的 - 它停在 12,而不是您想要的 9。将其更改为

While(three<9) //即限制之前的最后一个可整除的数字,或者如果它可整除的限制(在 5 的情况下)

总而言之,一个更加优雅的解决方案将涉及模数和一个不错的小 if 语句。我希望这有帮助!

于 2013-04-10T02:29:31.550 回答
1

我建议考虑使用模块化运算符来解决这个问题。在 java 中 % 将允许您执行模运算。例如 3 的任意倍数,例如 9 % 3 = 0 而 9 % 2 = 1。它可以被认为是第一个数除以第二个数后剩下的数。由该数字修改的数字的所有倍数都将返回零。

于 2013-04-10T02:08:34.990 回答
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 (%) 运算符可以提供帮助。

于 2013-04-10T02:06:01.327 回答
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 将被添加两次。了解模运算符 ,%以提出解决方案(例如,不将 5 添加到 tot5 计数 if five % 3 == 0

于 2013-04-10T02:06:17.147 回答
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 整除,如果值为 true,则将其添加到总数中。

于 2013-04-10T02:17:08.030 回答
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);
        }
    }
}
于 2020-04-07T07:37:08.337 回答