5 条题解
-
4
挺简单的:
#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
不理解这道题怎么通过率这么低
#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
嗨害嗨,我又来讲题了。 这道题很容易,有手就行,但要动手起来确实不容易。尤其是通分,找最大公约数化简,估计已经呵呵掉不少人了。 好了,上代码!(老规矩,仍然是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)) #搞不懂为什么总不缩进……
(离梦想越来越近了,嗨害嗨)
-
0
写题解请注意 鼓励大家写题解,但注意题解格式。
题解一定要有思路解析或代码注释,能否让别人理解你的思路
也是你的能力的检验,不要只放无意义的代码给大家复制,那就失去了做题的初心。
给代码两端加上这个会舒服一些
```cpp
你的代码
```
</span>
这个点在键盘的左上角tab上面那个键,注意切换输入法
#include<iostream> using namespace std; int main() { int n; cin>>n;//这是一个注释 return 0; }
请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。
抄袭题解一经发现直接取消成绩。
题解被删除的可能
- 代码不符合格式规范
- 没有思路讲解或者没有注释,
- 无意义的题解
大家携手共同维护一个良好的编程环境,如果一经发现,多次作乱。可能会被管理员拉黑,请注意,一旦拉黑即失去登陆资格。
-
-2
#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
- 标签
- 递交数
- 150
- 已通过
- 83
- 上传者