Found this Interview question. Here is my solution to it.
Assume f(x,y,z) = a^x * b^y * c^z
The x, y and z are integers larger than or equal to zero. Find the kth number in the series this function produces.
Check out my blog Captain DeadBones Chronicles
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60  | import sys
from collections import deque
def main(argv):
	if len(argv) != 5:
		sys.exit('Usage: kth.py <a> <b> <c> <k> <echo>')
	# get bases
	a = int(sys.argv[1])
	b = int(sys.argv[2])
	c = int(sys.argv[3])
	k = int(sys.argv[4])
	echo = int(sys.argv[5])
	
	# setup queue
	q1 = deque([])
	q2 = deque([])
	q3 = deque([])
	# init variables
	q1.append(1)
	val = 0
	for i in range(k):
	
		# set v to the next value in queue or to MAX_INT if queue empty
		if len(q1) > 0: v1 = q1[0] 
		else: v1 = 2**32
		
		if len(q2) > 0: v2 = q2[0]
		else: v2 = 2**32
		
		if len(q3) > 0: v3 = q3[0]
		else: v3 = 2**32
		
		# choose the next minimum value from the 3 queues
		val = min(v1,v2,v3)
		
		# add next values to queue
		if val == v1:
			q1.popleft()
			q1.append(a*val)
			q2.append(b*val)
		elif val == v2:
			q2.popleft()
			q2.append(b*val)
		elif val == v3:
			q3.popleft()
		
		# always add the largest
		q3.append(c*val)
		
		# if echo is True print every number
		if echo: print str(i+1) + ": " + str(val)
	
	print '\nThe kth number is: ' + str(val) + '\n'
	
if __name__ == "__main__":
	main(sys.argv[1:])
 | 
Here are some example output:
python kth.py 3 5 7 20 0
The kth number is: 175
And another with the numbers:
python kth.py 3 5 7 10 1
1: 1
2: 3
3: 5
4: 7
5: 9
6: 15
7: 21
8: 25
9: 27
10: 35
The kth number is: 35
      
Download
Copy to clipboard