您的位置:首页 > 其它

蓝桥杯第十题,

2016-04-09 14:15 246 查看
没写出来。但是先把大神代码保存下来,以后或许还能学习。这几

天还是挺忙的。
#include <cstdio>

struct FR
{
long long a;
long long b;
};

long long gcd( long long x, long long y )
{
if ( x > y )
return gcd( y, x );
if ( y % x == 0 )
return x;
return gcd( y%x, x );
}

FR GCD( FR A, FR B )
{
if ( A.a*B.b > A.b*B.a )
return GCD( B, A );
if ( (A.b*B.a) == (A.a*B.b) )
{
return A;
}
long long tmp1 = B.a * A.b;
long long tmp2 = B.b * A.a;
B.a = tmp1 / gcd(tmp1,tmp2);
B.b = tmp2 / gcd(tmp1,tmp2);
return GCD( B, A );
}

void Q_sort( long long s[], int left, int right )
{
int l = left;
int r = right;
long long flag = s[ left + right >> 1 ];
while ( l <= r )
{
while ( s[l] > flag )
l++;
while ( s[r] < flag )
r--;
if ( l <= r )
{
long long tmp;
tmp = s[l]; s[l] = s[r]; s[r] = tmp;
l++; r--;
}
}
if ( left < r )
Q_sort( s, left, r );
if ( l < right )
Q_sort( s, l, right );
}

int main()
{
int n;
scanf( "%d", &n );
long long *x = new long long[n+1];
for ( int i=0; i<n; i++ )
scanf( "%lld", x+i );

Q_sort( x, 0, n-1 );
for ( int i=1; i<n; i++ )
if ( x[i] == x[i-1] )
x[i-1] = -1;
Q_sort( x, 0, n-1 );

FR ans, tmp;
long long g;
ans.a = x[0] / gcd( x[0], x[1] );
ans.b = x[1] / gcd( x[0], x[1] );

for ( int i=2; i<n && x[i]>0; i++ )
{
g = gcd(x[i-1],x[i]);
tmp.a = x[i-1] / g;
tmp.b = x[i  ] / g;
ans = GCD( ans, tmp );
}
printf( "%d/%d\n", ans.a, ans.b );

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: