954,545 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Need help with max/min'ing multiply

I've been given a project in which I have to find the highest and lowest possible product using 3 2-digit numbers without repeating any numbers.

For example, the algorithm for the highest would be:
7n * 8n * 9n where the n's would be 4, 5, or 6.
The algorithm for the lowest would be:
1n * 2n * 3n where the n's would be 4, 5, or 6.

So far, I know I will have to give an option of finding the lowest or highest, so I would ask the user to put in 0 to minimize and 1 to maximize. Now, I have thought of using an if statement for reading their input, but I need some kind of loop that will rearrange the 4's, 5's, or 6's. I thought of attaching the values of 4, 5, and 6 to the 90, 80, 70, or 10, 20, 30, but am unsure of how I would code a proper loop or simple if statement to find the best answer by trying each combination. In theory, I could make some really over-extensive amount of code to do it right, but it wouldn't follow curriculum.

The code I have so far is

public class Powers
{ 
    public static void main(String[] args);
    
        int input;
        int numOneTensLow = 10;
        int numTwoTensLow = 20;
        int numThreeTensLow = 30;
        int numOneOnesLow = 4;
        int numTwoOnesLow = 5;
        int numThreeOnesLow = 6;
        int numOneTensHigh = 90;
        int numTwoTensHigh = 80;
        int numThreeTensHigh = 70;
        int numOneOnesHigh = 6;
        int numTwoOnesHigh = 5;
        int numThreeOnesHigh = 4;
        int numOneLow;
        int numTwoLow;
        int numThreeLow;
        int numOneHigh;
        int numTwoHigh;
        int numThreeHigh;
        int lowproduct = (numOneLow * numTwoLow * numThreeLow);
        int highprodcut = (numOneHigh * numTwoHigh * numThreeHigh);
        
        ConsoleIO console = new ConsoleIO();
        System.out.println("This program will calculate three two-digit" +
        " numbers that create the lowest and highest possible products " +
        "using the numbers 1 through 9 once in each.");
        System.out.println("To calculate the highest input 1, to calculate" +
        " the lowest, input 0: ");
        input = console.readInt();
        
        if(int input = 0);
        {
            do
            {
                numOneTensLow + NumOneOnesLow;
                numTwoTensLow + NumTwoOnesLow;
                numThreeTensLow + NumThreeOnesLow;
                System.out.println((numOneTensLow + numOneOnesLow) * (NumTwoTensLow + NumTwoOnesLow)
                * (NumThreeTensLow + NumThreeOnesLow));
                }
            }
IMtheBESTatJAVA
Light Poster
36 posts since Oct 2008
Reputation Points: -1
Solved Threads: 0
 

Base condition - use any java editor or IDE (NetBeans,Eclipse,BlueJ....)
What is this ? public static void main(String[] args);
Post formally proper code.

quuba

quuba
Posting Pro
573 posts since Nov 2008
Reputation Points: 123
Solved Threads: 106
 

I could help you with a little bit of help from your side first.Pls detail your problem and also comment your code wherever appropriate.

verruckt24
Posting Shark
952 posts since Nov 2008
Reputation Points: 485
Solved Threads: 89
 

would love to help you imbestatjava, but i have no clue what you are trying to do

multiply by numbers by products of 7,8,9 and 1,2,3?
that part is understandable, but what is this?
90, 80, 70, or 10, 20, 30
i don't get what these values have to do with anything

dickersonka
Veteran Poster
1,175 posts since Aug 2008
Reputation Points: 130
Solved Threads: 143
 

The values 90, 80, 70 and 10, 20, 30 have a lot to do with the program because im trying to find the highest possible combination of 9n, 8n, and 7n so it'd be (90 + n) * (80 + n) * (70 + n) where every n must be either 4, 5, or 6. So far the only error I can actually see is in the line of code

public static void main(String[] args);
IMtheBESTatJAVA
Light Poster
36 posts since Oct 2008
Reputation Points: -1
Solved Threads: 0
 

I think you need to do something like this :

highProduct1 = (numOneTensHigh + numOneOnesHigh) * 
					(numTwoTensHigh + numTwoOnesHigh) * 
					 (numThreeTensHigh + numThreeOnesHigh);
	
	highProduct2 = (numOneTensHigh + numTwoOnesHigh) * 
				    (numTwoTensHigh + numOneOnesHigh) * 
					 (numThreeTensHigh + numThreeOnesHigh);
	
	highProduct3 = (numOneTensHigh + numThreeOnesHigh) * 
					(numTwoTensHigh + numTwoOnesHigh) * 
					 (numThreeTensHigh + numOneOnesHigh);

	highProduct4 = (numOneTensHigh + numOneOnesHigh) * 
    				(numTwoTensHigh + numThreeOnesHigh) * 
    				 (numThreeTensHigh + numTwoOnesHigh);
	
	// This way try all combinations, if there are left any others ;-)
	// then get the max of them.
	
	if (max < highProduct1)
		max = highProduct1;
	
	if (max < highProduct2)
		max = highProduct2;
	
	if (max < highProduct3)
		max = highProduct3;
	
	if (max < highProduct4)
		max = highProduct4;
	
	// In the end print out the highest product
	System.out.println("Highest product is : " + max);


You can do the same way for the Lowest product.

verruckt24
Posting Shark
952 posts since Nov 2008
Reputation Points: 485
Solved Threads: 89
 

read again #2
quuba

quuba
Posting Pro
573 posts since Nov 2008
Reputation Points: 123
Solved Threads: 106
 

Your theme posted here is interesting. Min/max, combinatoric algorithms.
Line public static void main(String[] args);
change to public static void main(String[] args){

Add }} at end of program.
Download from http://www.netbeans.org/ NetBans IDE 6.5, select Java SE 37 MB.
and Java SE Development Kit (JDK) 6 Update 11 from http://java.sun.com/javase/downloads/index.jsp ,

or

JDK 6 Update 11 with NetBeans 6.5 from http://java.sun.com/javase/downloads/index.jsp .
It's free.
Install and work.
Advanced editor show to You all wrong points in code before compiling.

quuba
Posting Pro
573 posts since Nov 2008
Reputation Points: 123
Solved Threads: 106
 

I'm supposed to use BlueJ and its supposed to be a three-way multiplication, so I was hoping there could be some kind of loop I could use for this. An example for the maximization would be:
(90 + 6) * (80 + 5) * (70 +4)
And minimization would look like:
(10 + 5) * (20 + 6) * (30 + 4)
And somehow in a loop I would have to try each combination, so if I were to do each individually it would look like a bunch of lines of this:
14 * 25 * 36
14 * 26 * 35
15 * 26 * 34
15 * 24 * 36
16 * 25 * 34
16 * 24 * 35

...and that's just minimization.

Update: Now I get an error of ".class expected" for:

if(int input = 0);
IMtheBESTatJAVA
Light Poster
36 posts since Oct 2008
Reputation Points: -1
Solved Threads: 0
 

Update: Now I get an error of ".class expected" for:

if(int input = 0);

that's to be expected, remove the ;

stultuske
Posting Sensei
3,137 posts since Jan 2007
Reputation Points: 1,114
Solved Threads: 433
 

Update: Now I get an error of ".class expected" for:

if(int input = 0);
that's to be expected, remove the ;


Wrong answer, the if statement is wrong!
You want to check the statement not assign value...

if(input == 0){
    // Then something
}
peter_budo
Code tags enforcer
Moderator
15,436 posts since Dec 2004
Reputation Points: 2,806
Solved Threads: 902
 

Wrong answer, the if statement is wrong! You want to check the statement not assign value...

if(input == 0){
    // Then something
}


hmmmm ... must be even more tired than I thought to miss that :/
still, the ; shouldn't have been there

stultuske
Posting Sensei
3,137 posts since Jan 2007
Reputation Points: 1,114
Solved Threads: 433
 

In my opinion this is a better way to do that, in looping you would have to customise the loop in a way that it runs only for set of values that you need for e.g. no repitition of the digits etc this way you would have to take care of a lot of conditions which would make the code complex. Hence I say that the method shown above would be a more cleaner convenient option.
Also since the repetition is not allowed you actually have lesser combination of digits to evaluate so that you can write out all the combinations by hand (which I guess won't be more than 4-6)

verruckt24
Posting Shark
952 posts since Nov 2008
Reputation Points: 485
Solved Threads: 89
 

Okay I'm kind of stuck on this if-else statement. I chose to just give the correct ones directly, since looping would be too difficult to fabricate. Right now I get an error "else without if" for:

if(input == 0){
        {
            numOneLow = numOneTensLow + numOneOnesLow;
            numTwoLow = numTwoTensLow + numTwoOnesLow;
            numThreeLow = numThreeTensLow + numThreeOnesLow;
            System.out.println(lowproduct);
        }
        else(input == 1);
        
                numOneTensHigh + numOneOnesHigh;
                numTwoTensHigh + numTwoOnesHigh;
                numThreeTensHigh + numThreeOnesHigh;
                System.out.println(highproduct);             
            }
IMtheBESTatJAVA
Light Poster
36 posts since Oct 2008
Reputation Points: -1
Solved Threads: 0
 
if(input == 0){
        {


remove one of the {'s

and also: re-check what you're doing here:

else(input == 1);
stultuske
Posting Sensei
3,137 posts since Jan 2007
Reputation Points: 1,114
Solved Threads: 433
 

Thanks for the help, and someone told me that I should use the (input == #); over what I had to eliminate an error. This was to read the input from the user to determine if they want to find the highest or lowest product. I'm going to revise this program completely this weekend so that it tests every possibility completely since I have no clue how I should fabricate it within a loop. If there were a way to switch the integers n1, n2, n3 with the initial tens value for either, I could use a loop; however, I'm new to java (more of a VB guy) and am unaware as to how to do such a thing. If I were to code it, it would end up being very unorthodox as most of my programs do.

IMtheBESTatJAVA
Light Poster
36 posts since Oct 2008
Reputation Points: -1
Solved Threads: 0
 
(input == #);

yes and no.
yes: you do need to do

if(input == valueToCheck)


if it are integers, since you want to compare the value to equality and they're not Objects.
no: you do not want to put the ';' straight after the if. what happens if what is between the brackets is true, is what is behind the if statement, until the first ';' if there are no '{ }'
so, if you would check it like that, and put the ';', you would automatically run the next lines, if the statement was true or not, since the next lines are not dependent on the if.

stultuske
Posting Sensei
3,137 posts since Jan 2007
Reputation Points: 1,114
Solved Threads: 433
 
if(input == 0){
        {
            numOneLow = numOneTensLow + numOneOnesLow;
            numTwoLow = numTwoTensLow + numTwoOnesLow;
            numThreeLow = numThreeTensLow + numThreeOnesLow;
            System.out.println(lowproduct);
        }
        else(input == 1);
        
                numOneTensHigh + numOneOnesHigh;
                numTwoTensHigh + numTwoOnesHigh;
                numThreeTensHigh + numThreeOnesHigh;
                System.out.println(highproduct);             
            }


I don't think this approach would always work.
E.g. 96*85*74 = 603840 whereas 76*85*94 = 607240 you will have to try out all possible combinations of them and then check for the maximum among them as shown by me in post #6

verruckt24
Posting Shark
952 posts since Nov 2008
Reputation Points: 485
Solved Threads: 89
 
if(input == 0){
        {
            ...
        }
        else(input == 1);
        
               ...            
            }

I don't think this approach would always work.


especially not if you copy the errors we pointed out a couple posts above ;) :)

stultuske
Posting Sensei
3,137 posts since Jan 2007
Reputation Points: 1,114
Solved Threads: 433
 

thats for him to remove, I just copied the code he has pasted a couple posts above in the thread. Its certainly not my job.

verruckt24
Posting Shark
952 posts since Nov 2008
Reputation Points: 485
Solved Threads: 89
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You