最大比例

#include<iostream> #include<algorithm> using namespace std; const int maxn = 110; typedef long long ll; struct Node { long long x, y; ll gcd(ll a, ll b) { if (b == 0)return a; else gcd(b, a % b); } void setvalue(ll a, ll b) { ll u = gcd(a, b); x = a / u; y = b / u; } }node[maxn]; ll a[maxn]; //一个数n的n次能够得到a还能得到b,该算法返回的就是n ll mygcd(ll a, ll b) { if (a == b)return a; return mygcd(min(b / a, a), max(b / a, a)); } bool cmp(Node a, Node b) { if (a.x != b.x) return a.x < b.x; else return a.y < b.y; } int main(void) { ios::sync_with_stdio; int n; cin >> n; for (int i = 0; i < n; i++) { cin >> a[i]; //cout << a[i] << " "; } int cnt = 0; sort(a, a + n); for (int i = 0; i < n - 1; i++) { if (a[i] == a[i + 1])continue; node[cnt++].setvalue(a[i], a[i + 1]); } sort(node, node + cnt, cmp); ll up = node[0].y; ll down = node[0].x; /*for (int i = 0; i < cnt; i++) { cout << node[i].x << " " << node[i].y << endl; }*/ for (int i = 1; i < cnt; i++) { up = mygcd(up, node[i].y); down = mygcd(down, node[i].x); } cout << up << "/" << down; return 0; }
计算机小白记录学习过程,喜欢就点个推荐和关注吧O(∩_∩)O哈哈~

浙公网安备 33010602011771号