您的位置:首页 > 编程语言 > Python开发

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

2017-12-30 11:28 477 查看
测试点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))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: