### Solution to ps2

Jan. 24th, 2010 08:13 pm**jetamors**posting in

**intro_to_cs**

Putting my code for ps2 behind the cut. Please feel free to critique it, ask questions, or post your own code in the comments.

~~(Also a question: when I have a really long print statement like this, how do I break it up so it doesn't stretch the screen? I looked through some of the documentation, but I couldn't find anything on it.)~~ ETA: Figured it out and updated my code :)

# ps2 for MIT OpenCourse 6.00 Introduction to Computing # Written by Jetamors, January 2010 # Problems 1,3 # To do this exhaustive search, I'm using what are called nested for loops. # In this case: # a = number of 6-packs # b = number of 9-packs # c = number of 20-packs # Then I put for-loops for a, b, and c inside each other. The code will start with # a = 0, b = 0, c = 0 to see if it can find n (where n = the exact quantity we want). # If that doesn't work, it'll go to a = 0, b = 0, c = 1, then a = 0, b = 0, c = 2, # and so on. The for loop will end when the total is bigger than n, since that means # we've overshot our goal. # Once c gets too high, we go on to a = 0, b = 1, c = 0, and go through again. # Through doing this, the code will look at every possible combination of a, b, and c # that results in a number of nuggets less than or equal to n. # # The exception is if we manage to hit n exactly, which is what we want to do. In that case, # we break out of all three for loops, and print the results. # Below is problem 3, but my answer for problem 1 was very similar. # For problem 1, I used n in range(50,66) to generate the answers for those values of n. I # also did *not* use the trueiter or largest variables for problem 1. print "Problem 3\n" nuggets = (6,9,20) # nugget pack sizes trueiter = 0 # this variable is incremented every time an exact quantity can be purchased, # but is reset to zero if an exact quantity cannot be purchased. for n in range(1,58): # n is the exact quantity we want to purchase found = False # this variable becomes true when we find an exact quantity. for a in range (0,n/nuggets[0]+1): # a = number of 6-packs for b in range (0,n/nuggets[1]+1): # b = number of 9-packs for c in range (0,n/nuggets[2]+1): # c = number of 20-packs solution = nuggets[0]*a + nuggets[1]*b + nuggets[2]*c # solution is the total quantity if we purchase these numbers of packs if solution == n: found = True trueiter += 1 # for problem 1, comment this out. break if found == True: break if found == True: break if found == True: print "To get",n,"nuggets, you can buy",a,"6-packs,",b,"9-packs, and",c,"20-packs.\n" if found == False: trueiter = 0 # for problem 1, comment this out. largest = n # for problem 1, comment this out print n,"nuggets cannot be bought in exact quantity.\n" if trueiter == 6: # for problem 1, comment this out. break print "The largest number of nuggets that can't be purchased in exact quantity is "+repr(largest)+".\n" # Problem 4 # This code is pretty much the same as problem 3. The main difference is that now we want n in range(1,200), and # the output is of course different. print "Problem 4\n" nuggets = (7,9,17) # nugget pack sizes; you can alter this however you like. (Tuples do NOT take user input though.) trueiter = 0 for n in range(1,200): found = False for a in range (0,n/nuggets[0]+1): for b in range (0,n/nuggets[1]+1): for c in range (0,n/nuggets[2]+1): abc = [a,b,c] solution = nuggets[0]*a + nuggets[1]*b + nuggets[2]*c if solution == n: found = True trueiter += 1 break if found == True: break if found == True: break # if found == True: # print "To get",n,"nuggets, you can buy",a,"6-packs,",b,"9-packs, and",c,"20-packs.\n" if found == False: trueiter = 0 largest = n # print n,"nuggets cannot be bought in exact quantity.\n" if trueiter == 6: break print "Given package sizes "+repr(nuggets[0])+", "+repr(nuggets[1])+", and", print repr(nuggets[2])+", the largest number of nuggets that can't be purchased in exact quantity is "+repr(largest)+"."