#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
double *p=new double [n];
for(int i=0;i<n;i++)
{
cin>>p[i];
}
sort(p,p+n); //进行排序
double *q=new double [n-1]; //q数组表示公比的大小
for(int i=0;i<n-1;i++)
{
q[i]=p[i+1]/p[i];
}
int flag;
double x=1;
double y=1;
for(double i=1;i<50;i++) //遍历底数,寻找最大的底数
{
for(double j=i+1;j<50;j++)
{
flag=1;
for(int k=0;k<n-1;k++)
{
if(log(q[k])/log(j/i)!=int(log(q[k])/log(j/i))) //如果底数成立,则计算值应该是整数
{
flag=0;
break;
}
}
if(flag)
{
if(y/x<j/i) //根据题目要求选择满足条件的公比最大值
{
y=j;
x=i;
}
}
}
}
cout<<y<<"/"<<x<<endl; //输出最终结果
return 0;
}
蓝桥杯最大比例———对数函数遍历法求解
最新推荐文章于 2023-02-15 18:22:28 发布