简体   繁体   中英

Euler Challenge 1 in Java - I'm doing something wrong?

http://projecteuler.net/problem=1

Hey. I'm a high schooler trying to get a good grasp on programming problems, so I visited Project Euler. For Problem 1, I wrote up some code in Java that would of solved it, but something is evidently going wrong. Can I get some insight as to what?

Explanation: I stop everything at the index value of 332 because Java counts from 0, and 333 * 3 is 999 which is below 1,000. Apples is a seperate class with pretty much the same code, although it counts for 5. At the end, I manually add together the two answers, but it wasn't right. What am I doing wrong? The two final sums are:

Three: 164838

Five: 97515

public class Learning {
    public static void main(String[] args){
        int three[] = new int[333];
        int counter = 0;
        three[332] = 0;
        int totalthree = 0;
        int threeincrementer = 1;
        int grandtotal;
        boolean run = true;
        boolean runagain = true;


        for (counter = 1; counter<=332; counter++){
            three[counter] = 3 * counter;
            if (!(three[332] == 0)){
                System.out.println("Finished three.");

                while (run == true){
                    totalthree = totalthree + three[threeincrementer];
                    threeincrementer++;
                    if (threeincrementer >= 332){
                        run = false;
                        System.out.println("Three final is: " + totalthree);
                        }       
                    }
                }


        if (runagain == true){
        apples ApplesObject = new apples();
        ApplesObject.rerun(0);
        runagain = false;
            }
        }
    }
}

Some numbers are at the same time multiplication of 3 AND 5 like 15 so you shouldn't separately calculate sum of all multiplications of 3 and multiplications of 5 and than add them because you will end up doing something like

sum3 = 3,6,9,12,15,...

sum5 = 5,10,15,...

so first sum3 will include 15, and sum5 will also include it which means you will add 15 two times. Now to balance your calculations you will need to subtract from your sum3+sum5 sum which will add all multiplications of 15

sum15 = 15,30,45,...

So using your approach your final formula should look like sum3+sum5-sum15 .

But simpler solution for this problem can look like

sum = 0 
for each X in 1...999 
   if (X is multiplication of 3) OR (X is multiplication of 5)
      add X to sum

To check if some number X is multiplication of number Y you can use modulo operator % (example reminder = X % Y ) which finds the remainder of division of one number by another.

You can find more Java operators here

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM