蓝桥杯第十题,

没写出来。但是先把大神代码保存下来,以后或许还能学习。这几

天还是挺忙的。
#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值