鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: 冬雪雪冬

[技术交流] Python:每日一题 124

[复制链接]
发表于 2017-11-18 15:54:12 | 显示全部楼层
  1. def fracAdd(fractop1,fracbottom1,fractop2,fracbottom2):
  2.     frac_top1 = fractop1
  3.     frac_top2 = fractop2
  4.     frac_bottom1 = fracbottom1
  5.     frac_bottom2 = fracbottom2
  6.     if frac_bottom1 == frac_bottom2:
  7.         frac_top3,frac_bottom3 = frac_top1+frac_top2,frac_bottom1
  8.     else:
  9.         frac = frac_top1,frac_bottom1
  10.         frac_top1*=frac_bottom2
  11.         frac_bottom1*=frac_bottom2
  12.         frac_top2*=frac[1]
  13.         frac_bottom2*=frac[1]
  14.         frac_top3 = frac_top1+frac_top2
  15.         frac_bottom3 = frac_bottom1
  16.     return (frac_top3,frac_bottom3)
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
冬雪雪冬 + 1 + 1 没有约分

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-18 20:27:02 | 显示全部楼层
  1. def lcm(x, y): # 最小公倍数
  2.     s= x*y
  3.     while y:
  4.         x, y = y, x%y
  5.     return s//x

  6. def fracAdd(num1, deno1, num2, deno2):
  7.     if deno1 == deno2: # 分母相同
  8.         return((num1+num2, deno1))
  9.     else: # 分母不相同
  10.         comm = lcm(deno1, deno2)
  11.         new_num1 = comm // deno1 * num1
  12.         new_num2 = comm // deno2 * num2
  13.         new_num = new_num1 + new_num2
  14.         return((new_num,comm))
  15. if __name__ == '__main__':
  16.     print(fracAdd(1, 2, 5, 4))
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
冬雪雪冬 + 1 + 1 没有约分

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-18 22:03:15 | 显示全部楼层
  1. import random as r

  2. class Solution:
  3.     def fracAdd(self, mo_1, den_1, mo_2, den_2):
  4.         """
  5.         :type mo_1, den_1, mo_2, den_2: int
  6.         :rtype: tuple
  7.         """
  8.         if den_1 == 0 or den_2 == 0:
  9.             return "请输入分母非零的分数"
  10.         else:
  11.             den_3 = den_1 * den_2
  12.             temp_1 = mo_1 * den_2
  13.             temp_2 = mo_2 * den_1
  14.             mo_3 = temp_1 + temp_2
  15.             if mo_3 == 0:
  16.                 return(0, 0)
  17.             else:
  18.                 factor= self.judge(mo_3, den_3)
  19.                 mo_3 //= factor
  20.                 den_3 //= factor
  21.                 return (mo_3, den_3)

  22.     def judge(self, x, y):
  23.         a = min(abs(x), abs(y))
  24.         factor = 1
  25.         for i in range(2, (a+3)//2):
  26.             if x % i == 0 and y % i == 0:
  27.                 factor = i
  28.         if x * y > 0:
  29.             return factor
  30.         elif x * y < 0:
  31.             return -factor

  32. # 测试用例
  33. a = Solution()
  34. range_area = [-100,100]
  35. n = 100
  36. for i in range(n):
  37.     mo_1 = r.randint(range_area[0],range_area[1])
  38.     den_1 = r.randint(range_area[0],range_area[1])
  39.     mo_2 = r.randint(range_area[0],range_area[1])
  40.     den_2 = r.randint(range_area[0],range_area[1])
  41.     print(mo_1, den_1, mo_2, den_2, a.fracAdd(mo_1, den_1, mo_2, den_2), end='\n')
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
冬雪雪冬 + 1 + 1 没有约分

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-18 22:03:48 | 显示全部楼层
本帖最后由 黎芃荨 于 2017-11-18 22:06 编辑

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-19 00:44:48 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-11-19 11:50:47 | 显示全部楼层
本帖最后由 776667 于 2017-11-19 12:12 编辑
  1. def fracAdd(a,b,c,d):

  2.     def gcd(x,y):
  3.         if y == 0:
  4.             return x
  5.         return gcd(y,x%y)

  6.     a *= d
  7.     c *= b
  8.     b *= d
  9.     numerator = (a+c)//gcd(sorted([a+c,b])[1],sorted([a+c,b])[0])
  10.     b = b//gcd(sorted([a+c,b])[1],sorted([a+c,b])[0])
  11.     return (numerator,b)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-19 16:19:03 | 显示全部楼层
  1. # 加上约分了

  2. def lcm(x, y): # 最小公倍数
  3.     s= x*y
  4.     while y:
  5.         x, y = y, x%y
  6.     return s//x

  7. def gcd(x,y): # 最大公约数
  8.     return x if y == 0 else gcd(y, x%y)

  9. def fracAdd(num1, deno1, num2, deno2):
  10.     if deno1 == deno2: # 分母相同
  11.         return((num1+num2, deno1))
  12.     else: # 分母不相同
  13.         comm = lcm(deno1, deno2)
  14.         new_num1 = comm // deno1 * num1
  15.         new_num2 = comm // deno2 * num2
  16.         new_num = new_num1 + new_num2
  17.         igcd = gcd(new_num, comm)
  18.         return((new_num//igcd,comm//igcd))
  19. if __name__ == '__main__':
  20.     print(fracAdd(1, 2, 6, 4)) # (2,1)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-21 07:09:17 | 显示全部楼层
def gcd(x, y):   
    # 计算最大公约数,运用欧几里得算法,即两个数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数。
    return x if y == 0 else gcd(y, x % y)


def fracAdd(n_1, d_1, n_2, d_2):    # 输入 分子1, 分母1, 分子2, 分母2
    # 通分成同分母,然后分子相加
    d_3 = d_1 * d_2
    n_1 *= d_2
    n_2 *= d_1
    n_3 = n_1 + n_2

    # 除以最大公约数
    factor = gcd(d_3, n_3)
    d_3 //= factor
    n_3 //= factor
    return n_3, d_3


n_1, d_1, n_2, d_2 = map(int, input('请分别输入分子1, 分母1, 分子2, 分母2:').split(','))
print(fracAdd(n_1, d_1, n_2, d_2))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-22 16:24:08 From FishC Mobile | 显示全部楼层
SixPy 发表于 2017-11-14 12:48

写的逻辑挺清楚的,容易看懂。赞
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-23 15:59:53 | 显示全部楼层
def fenzi(a,b,c,d):
    x=a*d+c*b
    y=b*d
    if x>y:
        n=y
    else:
        n=x
    while True:
        if x%n==0 and y%n==0:
            x=x/n
            y=y/n
        n=n-1
        if n==0:
            break
    return int(x),int(y)

s=fenzi(18,24,1,1)
print(s)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-28 11:20:34 | 显示全部楼层
  1. def fracAdd(分子1, 分母1, 分子2, 分母2):
  2.     a = 分母1*分母2
  3.     b = 分子1*分母2 + 分子2*分母1
  4.     #目标分数为b/a,需约分
  5.     n = min(abs(b),abs(a))
  6.     for i in range(n,0,-1):
  7.         if a%i==0 and b%i==0:
  8.             a = a//i
  9.             b = b//i
  10.             break
  11.     return (b, a)


  12. print(fracAdd(1, 6, 2, 3))

  13. #输出:(5, 6)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-29 14:58:06 | 显示全部楼层
def fracAdd(mole_0,deno_0,mole_1,deno_1):
    denominator=1
    while denominator%deno_0 != 0 or denominator%deno_1 != 0:
        denominator+=1

    multiple_0=denominator/deno_0
    multiple_1=denominator/deno_1

    molecule_0=multiple_0*mole_0
    molecule_1=multiple_1*mole_1

    result_mole=int(molecule_0+molecule_1)
    result_deno=denominator
    return (result_mole,result_deno)

print('fracAdd(1,6,2,3)')
print(fracAdd(1,6,2,3))

mole_0=int(input("please enter the molecule of the first number:"))
deno_0=int(input("please enter the denominator of the first number:"))

mole_1=int(input("please enter the molecule of the second number:"))
deno_1=int(input("please enter the denominator of the first number:"))

print(fracAdd(mole_0,deno_0,mole_1,deno_1))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-18 19:51:51 | 显示全部楼层
  1. def fun124(*arg):
  2.     mol1 = arg[0]
  3.     m = den1 = arg[1]
  4.     mol2 = arg[2]
  5.     n = den2 = arg[3]

  6.     #求分母最小公倍数
  7.     if m > n:
  8.         m, n = n, m
  9.     r = m%n
  10.     while r:
  11.         m = n
  12.         n = r
  13.         r = m%n

  14.     str1 = "%d/%d" % ((mol1 * den2 + mol2 * den1) / n, den1 * den2 / n )
  15.     return str1


  16. print(fun124(1,6,5,3))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-1 18:21:21 | 显示全部楼层
  1. from math import gcd
  2. def fracAdd(a,b,c,d):
  3.   n1,n2=a*d+b*c,b*d
  4.   n=gcd(n1,n2)
  5.   return n1//n,n2//n
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-25 17:36:51 | 显示全部楼层
  1. def fracAdd(n1,d1,n2,d2):
  2.     def gcd(a, b):
  3.         return (a if b == 0 else gcd(b, a % b))
  4.     n3,d3=n1*d2+n2*d1,d1*d2
  5.     return n3//gcd(n3,d3),d3//gcd(n3,d3)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-1 09:03:56 | 显示全部楼层
def fracAdd(a, b, c, d):
    if b % d == 0:
        k = b // d
        return (a + c * k, b)
    elif d % b == 0:
        k = d // b
        return (a * k + c, d)
    else:
        return (a * d + b * c, b * d)
        fracAdd
        
print(fracAdd(1, 6, 2, 3))
print(fracAdd(3, 4, 5, 8))
print(fracAdd(3, 5, 5, 8))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 01:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表