首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >N下面3或5的所有倍数之和。Project Euler

N下面3或5的所有倍数之和。Project Euler
EN

Stack Overflow用户
提问于 2015-07-02 06:53:15
回答 3查看 2.9K关注 0票数 0

所以我正在做Project Euler挑战,我被困在第一个挑战中,我使用Java作为pl。例如,如果我们必须列出10以下的所有自然数,它们是3或5的倍数,我们得到3,5,6和9,这些倍数的总和是23。我们必须求出N以下3或5的所有倍数的总和。

我的代码可以在Eclipse上运行,但是我得到“不错的尝试,但是您没有通过这个测试用例”。使用stdout :没有响应,当我提交代码时,我在所有测试用例上都得到了错误的答案,下面是代码:

代码语言:javascript
运行
复制
public class Solution {
    public static void main(String[] args) {
        for (int j = 0; j < args.length; j++) {
            int N = Integer.parseInt(args[j]);
            if (Somme(N) != 0) {
                System.out.println(Somme(N));
            }
        }
    }

    public static int Somme(int Nn) {
        int s = 0;
        for (int i = 0; i < Nn; i++) {
            if (((i % 3) == 0) || ((i % 5) == 0)
                && !(((i % 3) == 0) && ((i % 5) == 0))) {
                s = s + i;
            }
        }
        return (s);
    }
}

更新:所以,我看了更多,结果发现这是应该怎么做的:

代码语言:javascript
运行
复制
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);
}

}

现在唯一的问题是,我希望它能够读取所有的数字,然后显示总和,现在它读取一个数字,并在后面显示总和,有什么想法吗?

EN

回答 3

Stack Overflow用户

发布于 2015-07-02 07:25:31

您正在跳过一些不应该跳过的数字。

代码语言:javascript
运行
复制
if (((i % 3) == 0) || ((i % 5) == 0)
    && !(((i % 3) == 0) && ((i % 5) == 0)))

这条声明说:i必须能被35整除,而不能被35整除。重述:i必须能被35整除,但不能同时被这两个整除。只需删除第二行,它就可以工作了。

票数 2
EN

Stack Overflow用户

发布于 2015-07-02 07:31:29

我相信这是Turing85所说的和哇哇的结合。Project Euler的示例都表明它不需要不同的输入。您只需生成正确的输出。因此,将Integer.parseInt(args[j]);替换为Integer.parseInt(1000);添加到图灵所说的内容中,解决方案应该遵循以下伪代码:

代码语言:javascript
运行
复制
target=999
sum=0
for i=1 to target do
if (i mod 3=0) or (i mod 5)=0 then sum:=sum+i
output sum
票数 0
EN

Stack Overflow用户

发布于 2018-12-03 23:34:28

使用for循环,您可以获得从01000的所有数字,通过使用if条件,您可以获得所需的数字,即35的倍数,将它们相加将得到最终输出,如下所示:

代码语言:javascript
运行
复制
public class SUM_3_5{

    public static void main(String []args) {
        int sum=0;
        int i;

        for(i=0;i<1000;i++)
        {
             if(i%3==0||i%5==0)
                 sum=sum+i;
        }

        System.out.println(sum);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31172993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档