2 条题解
-
5
/* 首先排序后去重,避免1的干扰 例如样例2 变成32 200 3125 要找到这个比例,就是在200/32,3125/200去找 首先利用gcd约分 变成25/4 125/8 设公比为q,q=q1/q2 25/4肯定是q1^x1/q2^x2 125/8肯定是q1^x2/q2^x2 转化为这个问题从q1^1,q1^2,q1^3……q1^n,q1^m 找到q1和从1*q1,2*q1找到q1不同 q1^n和q1^m必然和q1^m,q1^n-m求出来的q1相同 类似于辗转相除保证分子大于分母即可 例如25和125 125/25=5,转化为,25和5,25/5=5,转化为5和5 此时分子分母相等所以q1=5 */ #include <bits/stdc++.h> using namespace std; long long n,a[105],k,minn,maxx; vector<long long> v1,v2; long long gcd(long long x,long long y) { if(y==0) return x; return gcd(y,x%y); } long long qgcd(long long x,long long y)//x分母,y分子 { if(x>y) swap(x,y);//分母大于分子交换一下 if(x==y) return x; return qgcd(x,y/x); } int main() { ios::sync_with_stdio(false); cin.tie(0); cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; sort(a+1,a+n+1); int N=unique(a+1,a+n+1)-(a+1);//去重函数,使用前必须排序,并不是删除数组的元素,只是把不重复的放到了前面。 for(int i=1;i<=N-1;i++) { k=gcd(a[i],a[i+1]); v2.push_back(a[i]/k);//v2保存约分后的分母 v1.push_back(a[i+1]/k);//v1保存约分后的分子 } maxx=v1[0],minn=v2[0]; for(int i=1;i<v1.size();i++) { maxx=qgcd(maxx,v1[i]); minn=qgcd(minn,v2[i]); } cout<<maxx<<"/"<<minn; return 0; }
-
-6
写题解请注意 鼓励大家写题解,但注意题解格式。
题解一定要有思路解析或代码注释,能否让别人理解你的思路
也是你的能力的检验,不要只放无意义的代码给大家复制,那就失去了做题的初心。
给代码两端加上这个会舒服一些
```cpp
你的代码
```
</span>
这个点在键盘的左上角tab上面那个键,注意切换输入法
#include<iostream> using namespace std; int main() { int n; cin>>n;//这是一个注释 return 0; }
请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。
抄袭题解一经发现直接取消成绩。
题解被删除的可能
- 代码不符合格式规范
- 没有思路讲解或者没有注释,
- 无意义的题解
大家携手共同维护一个良好的编程环境,如果一经发现,多次作乱。可能会被管理员拉黑,请注意,一旦拉黑即失去登陆资格。
- 1
信息
- ID
- 169
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- 递交数
- 291
- 已通过
- 106
- 上传者