1062. 最简分数(20)——Python

测试点1测试的是,输入的初始的两个值是没有大小的先后顺序的,开始的时候我是把两个值默认是先输入的是大的;

测试点2测试的是,输出的应是两数之间的数,不能包括两个数,就算在编程时自己知道这个规则,但是实现的程序可能就没有按照自己想的那样跑,所以自己可以验证下;

测试点4测试的是,输出的格式是否正确,就是中间有空格,但是开始跟结束的时候不能有空格。

#欧几里得算法求最大公约数
def get_gcd(a, b):
	a, b = int(a), int(b)
	k = a // b
	remainder = a % b
	while remainder != 0:
		a = b
		b = remainder
		k = a // b
		remainder = a % b
	return b

#获得a,b的最小公倍数
def get_lcm(a, b):
	a, b = int(a), int(b)
	if a > b:
		greater = a
	else:
		greater = b
	while(True):
		if((greater % a == 0) and (greater % b == 0)):
			lcm = greater
			break
		greater += 1
	return lcm	

#得到同分后的数
def get_samedeno(a, b, same):
	a, b, same = int(a), int(b), int(same)
	multi = same // b
	my_mole = a * multi
	return my_mole
		
string = input().split()
fir_mole, fir_deno = string[0].split('/')
sec_mole, sec_deno = string[1].split('/')
deno_lcm = get_lcm(fir_deno, sec_deno)
deno_lcm = get_lcm(deno_lcm, string[2])
num_1 = get_samedeno(fir_mole, fir_deno, deno_lcm)
num_2 = get_samedeno(sec_mole, sec_deno, deno_lcm)
fir_num = min(num_1, num_2)
last_num = max(num_1, num_2)
my_num = get_samedeno(1, int(string[2]), deno_lcm)
key = 0
num = my_num
multi = fir_num // my_num
remainder = fir_num % my_num
if remainder != 0:
	multi += 1
my_num = num * multi
list = []
while(my_num >= fir_num and my_num <= last_num):
	my_gcd = get_gcd(multi, string[2])	
	if my_gcd == 1:
		string_1 = str(multi) + '/' + string[2]
		if string_1 != string[0] and string_1 != string[1]:
			list.append(string_1)
	multi += 1
	my_num = num * multi
print(' '.join(list))


猜你喜欢

转载自blog.csdn.net/baidu_38271024/article/details/78936698