Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的Euler#1项目_Java - Fatal编程技术网

Java中的Euler#1项目

Java中的Euler#1项目,java,Java,我的代码有问题。我不想看别人,所以我想知道我的眼睛怎么了 如果我们列出10以下的所有自然数,它们是3或5的倍数,我们得到3、5、6和9。这些倍数之和是23 求1000以下所有3或5的倍数之和 public class Multiples { public static void main (String [] args) { int temp = 0; int temp2 = 0; for (int i = 0; i <= 100

我的代码有问题。我不想看别人,所以我想知道我的眼睛怎么了

如果我们列出10以下的所有自然数,它们是3或5的倍数,我们得到3、5、6和9。这些倍数之和是23

求1000以下所有3或5的倍数之和

public class Multiples {
    public static void main (String [] args) {
        int temp = 0;
        int temp2 = 0; 

        for (int i = 0; i <= 1000; i++) {
            if (i % 3 == 0) {
                temp = temp + i;
            }            
        }

        for (int j = 0; j <= 1000; j++) {
            if (j % 5 == 0) {
                temp2 = temp2 + j;
            }
        }

        System.out.println(temp + temp2);
    }
}
公共类倍数{
公共静态void main(字符串[]args){
内部温度=0;
int temp2=0;
对于(int i=0;i你应该做:

for (int i = 0; i < 1000; i++) {
    if (i % 3 == 0 || i % 5 ==0) {
        temp += i;
    }
}
for(int i=0;i<1000;i++){
如果(i%3==0 | | i%5==0){
温度+=i;
}
}
这将只添加一次每个数字。在您的代码中,您将添加15两次,因为它在两个循环中的两个条件中都会得到满足


还请注意,根据要求,您应该循环到
<1000
,而不是
。如果一个数字是3和5的乘法器(例如:15、30、45等),您将对其计数两次。因此,对于
循环,您应该有一个,而不是两个
,条件复杂:

public class Multiples {
    public static void main (String [] args) {
    int temp = 0;

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

    }

    System.out.println (temp);
   }
}
公共类倍数{
公共静态void main(字符串[]args){
内部温度=0;
对于(int i=0;i<1000;i++){
如果(i%3==0 | | i%5==0){
温度=温度+i;
}
}
System.out.println(温度);
}
}

您将所有15的倍数加了两次。使用您的算法,运行第三个循环,测试数字是否可以被15整除,然后将其从总和中删除。

您的代码不正确,原因很简单:有些数字也可以被3和5整除。在您的代码中,您对它们进行了两次计数:第一个循环一次,第二个循环一次在第二个循环中,您应该做的是以下选项之一:

A.只需运行一个循环并使用两个条件,而不是一个:检查数字是否可以被3除,也可以被5除,然后,将其添加到总和中

我编写了一个Python代码,使用了与您使用的相同的方法,但添加了一个条件。这绝对不是推荐的,也不是有效的,但它可能会帮助您更好地理解

numlist = []

for i in range (1, 1000):
    if i % 3 == 0:
        numlist.append(i)


for j in range (1, 1000):
    if j % 5 == 0:
        if not j in numlist:
            numlist.append(j)


counter = 0
for a in numlist:
    counter += a


print counter
试验

解决 1) O(n): 其他答案有一点改进(
i
可以从
3
开始):

在第一种情况下,
i
的值约为
n
(1000),在第二种情况下,
i
的值约为
n/3+n/5+n/15
(600)。第二种情况也更好,因为比较较少(如果涉及
,则无

对于较大的输入数字(
Integer.MAX_VALUE
而不是
1000
),需要:

  • 9秒
3) O(1): 此解决方案基于以下观察结果:

1+2+…+n=n*(n+1)/2


在这种情况下,即使输入是
整数.MAX_值
,计算速度也非常快(小于1ms).

某些特定条件出现时,两个条件同时满足3和5。例如,当i=15同时满足15%3==0和15%5==0。因此,您的答案可能比预期的要高,因为您分别尝试了3和5。在这些特定条件下,这样做可以添加重复的值。 因此,最好在单个循环中进行检查。 像这样-

    for(int i=0 ; i<1000 ; i++)
    {
        if(i%3==0 || i%5==0)
        {
            temp = temp + i;
        }
        System.out.println(temp);
    }

for(inti=0;i只需编写以下简单的java代码

 public static void main(String[] args)
{
int i,sum=0;
for ( i = 3; i <1000; i++)
 {
 if ((i % 3 == 0)||(i%5==0) )
 sum=sum+i;
 }
System.out.print(sum);
}
publicstaticvoidmain(字符串[]args)
{
int i,和=0;

对于(i=3;i如果数字是3和5的倍数呢?例如15..在你的代码中,你会将它们相加两次…有些数字是3和5的倍数,你可以将它们计算两次。你可以尝试只计算一次。你所做的一个错误是,你将15相加两次。你对所有可以被整除的值也这样做3和5相关:您的解决方案存在问题:1)你想要小于1000.j的5的倍数,但不应该两个循环都加一个像15这样的数字两次吗?基本上这取决于要求,我认为他们不想让你每个数字加两次。这是有道理的。谢谢。我想Euler_项目是为了更好地编程,我不认为你应该简单地处理答案正如你所做的。特别是当有人已经指出了她的代码中的问题。顺便说一句,请注意
temp+=i
是一种更简洁的表达
temp=temp+i
谢谢你的方式!我很感激。
public static void main(String[] args) {
    int sum = 0;
    for (int i = 3; i < 1000; i++) {
        if (i % 3 == 0 || i % 5 == 0) {
            sum += i;
        }
    }
    System.out.println(sum);
}
public static void main(String[] args) {
    long sum = 0 ;
    for ( long i = 3 ; i < 1000 ; i+=3 ){
        sum+=i;
    }
    for ( long i = 5 ; i < 1000 ; i+=5 ){
        sum+=i;
    }       
    for ( long i = 15 ; i < 1000 ; i+=15 ){
        sum-=i;
    }
    System.out.println(sum);
}
public static void main(String[] args) {
    int nr = 1000;
    nr--;
    int x3 = nr/3;
    int x5 = nr/5;
    int x15 = nr/15;
    
    long sum1 = 3*x3*(x3+1); 
    long sum2 = 5*x5*(x5+1);
    long sum3 = 15*x15*(x15+1);
    
    long sum = (sum1+sum2-sum3)/2;
    System.out.println(sum);
}
    for(int i=0 ; i<1000 ; i++)
    {
        if(i%3==0 || i%5==0)
        {
            temp = temp + i;
        }
        System.out.println(temp);
    }
 public static void main(String[] args)
{
int i,sum=0;
for ( i = 3; i <1000; i++)
 {
 if ((i % 3 == 0)||(i%5==0) )
 sum=sum+i;
 }
System.out.print(sum);
}