5 条题解

  • 4
    @ 2023-1-18 10:52:01

    挺简单的:

    #include <bits/stdc++.h>
    using namespace std;
    int a , b , c , d , x , y;
    int gcd(int x , int y)
    {
        if (y == 0) return x;
        return gcd(y , x % y);
    }
    int lcm(int x , int y)
    {
        return (x * y) / gcd(x , y);//粽唆粥汁,x * y = gcd(x , y) * lcm(x , y)
    }
    
    int main()
    {
        scanf("%d/%d %d/%d" , &a , &b , &c , &d);//粽唆粥汁,scanf中若的字符串中若加入特殊字符(如代码中的/),在输入时可忽略此字符
    
        //求和
        y = lcm(b , d);
        x = lcm(b , d) / b * a + lcm(b , d) / d * c;
    
        if (x % y == 0)//若分数是小数
            printf("%d" , x / y);
        else
        {
            int g = gcd(x , y);//要提前用变量保存gcd,否则在分子,分母除以gcd时会改变其值
            if (g > 1)
            {
                x /= g;
                y /= g;
            }
            printf("%d/%d" , x , y);
        }
        return 0; 
    }
    
    • 3
      @ 2022-8-9 19:05:45

      不理解这道题怎么通过率这么低

      #include<bits/stdc++.h>
      using namespace std;
      double a,b,c,d,zi,mu,ans; // zi是分子,mu是分母
      int ansInt; // 化为整型后的ans
      char chu; // chu是除,没什么用,用来抵消掉题目里那没用的/而已
      int main(){
          ios::sync_with_stdio(false); // 输入输出加速
          cin.tie(0);
          cout.tie(0);
          cin>>a>>chu>>b>>c>>chu>>d; // 输入abcd
          zi=a*d+b*c; // 计算加法运算后的分子
          mu=b*d; // 计算相乘后的分母
          // 以上计算出了答案分数,但是不是最简分数
          ans=zi/mu; // 计算结果
          ansInt=ans; // 向下取整结果
          if(ans==ansInt){ // 如果ans是浮点数,那么ans必然!=ansInt
              cout<<ansInt; // 符合条件直接输出就行了
          }else{
              // __gcdd(x,y)为C++算法库内置的计算最小公约数函数 注意前面是两条英文下划线
              int gcdd=__gcd(int(zi),int(mu)); // 计算分子和分母最小公约数
              cout<<zi/gcdd<<"/"<<mu/gcdd;
          }
          return 0;
      }
      
      • 1
        @ 2022-10-24 20:09:16

        嗨害嗨,我又来讲题了。 这道题很容易,有手就行,但要动手起来确实不容易。尤其是通分,找最大公约数化简,估计已经呵呵掉不少人了。 好了,上代码!(老规矩,仍然是python 3,C++的请移步)

        '''
        这里说明一下:a/b+c/d=x/y+w/z,即a=x,b=y,c=w,d=z.
        本题写的有些复杂,但本质是先通分再化简,这点要牢记。
        过程:x/y+w/z=(x*z)/(y*z)+(w*y)/(z*y)=(x*y+z*w)/(y*z)
        '''
        a=input().split(' ')#第一次分割
        p=a[0].split('/')#分数a/b
        q=a[1].split('/')#分数c/d
        x=int(p[0])
        y=int(p[1])
        w=int(q[0])
        z=int(q[1])
        s1=x*z+w*y#求分子
        s2=z*y#分母
        u=[]
        if s1>s2:#求最大公因数
        #这里也可以改为for i in range(1,s1):这样方便一点
        for i in range(2,s2):
        if s2%i == 0 and s1%i == 0:
        u.append(i)
        else:
        for i in range(2,s1):
        if s2%i == 0 and s1%i == 0:
        u.append(i)
        #否则就像这样写个try……except……else语句调试.
        try:
        k=max(u)
        except:#[a,b]=[c,d]=1
        print(str(s1)+'/'+str(s2))
        else:#[a,b],[c,d]≠1
        s1=s1//k
        s2=s2//k
        if s1%s2==0:#s1/s2=[s1/s2]
        print(s1//s2)
        else:
        print(str(s1)+'/'+str(s2))
        #搞不懂为什么总不缩进……
        

        (离梦想越来越近了,嗨害嗨)

        • @ 2023-9-2 21:54:22

          那个,在输入代码的时候加上这个

          ```py

          你的代码

          ```

          就行了,有缩进也有高亮

      • 0
        @ 2022-4-24 16:45:14

        写题解请注意

        鼓励大家写题解,但注意题解格式。

        题解一定要有思路解析或代码注释,能否让别人理解你的思路

        也是你的能力的检验,不要只放无意义的代码给大家复制,那就失去了做题的初心。

        给代码两端加上这个会舒服一些

        ```cpp

        你的代码

        ```

        </span>

        这个点在键盘的左上角tab上面那个键,注意切换输入法

        #include<iostream>
        using namespace std;
        int main()
        {
            int n;
            cin>>n;//这是一个注释
            return 0;
        } 
        

        请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。

        抄袭题解一经发现直接取消成绩。

        题解被删除的可能

        1. 代码不符合格式规范
        2. 没有思路讲解或者没有注释,
        3. 无意义的题解

        大家携手共同维护一个良好的编程环境,如果一经发现,多次作乱。可能会被管理员拉黑,请注意,一旦拉黑即失去登陆资格。

        • -2
          @ 2022-8-23 12:22:15

          #include <iostream> using namespace std; #define ll long long ll a,b,c,d; //四个数a,b,c,d char c1,c2; //c1和c2用来抵消"/"号 ll gcd(ll x,ll y) //求最大公因数 (辗转相除法) { if (y == 0) return x; return gcd(y,x%y); } ll lcm(ll x,ll y) //求最小公倍数 { return x/gcd(x,y)y; } int main() { cin >> a >> c1 >> b >> c >> c2 >> d; ll g = lcm(b,d); //准备通分,先求出分母的最小公倍数 a = a(g/b); //分子 b = g; //分母 c = c*(g/d); //分子 d = g; //分母 int sum = a+c; //求出分子的和 ll e; e = gcd(sum,g);//求出结果的分子和分母的最大公因数,g为分母,sum为分子 if (sum % g == 0)//如果分母能被分子整除,那么就直接输出分母除以分子 { cout << sum/g << endl; } else //否则输出通分后的结果 cout << sum/e << "/" << g/e << endl; return 0; }

          • 1

          信息

          ID
          1278
          时间
          1000ms
          内存
          256MiB
          难度
          3
          标签
          递交数
          148
          已通过
          81
          上传者