题意不难,相当于给出一组分母和一组分子,都不会为0,用他们构造出的分数按从小到大排列,对于相邻的两个数,用后一个除以前一个(即大的除以小的)的得到的数中,输出最大的即可.题意看懂了做起来不难,关键是输出要求四舍五入,输出两位小数,末尾是0也要输出(我就是栽在这里了),用C的printf相对简单,用C++的cout则复杂些,通过cout.precision(3)设置精度为两位小数,用cout.width(4)设定输出宽度为4(个位一位,小数点一位,小数两位),用cout.setf(ios::left)设定左对齐,用cout.setf(ios::showpoint)保证只有个位时也输出小数点,用cout.fill(‘0’)设定不足4位时末尾补0.
输入输出是基本条件,还是要好好复习复习了.
同时,这里用到了qsort,也要再熟悉一下了.
Source:
#include<iostream>
#include<cmath>
#include<stdlib.h>
using namespace std;
int cmp(const void *a,const void *b);
int f[11];
double m,ra[110],r,t;
int main()
{
int fc,rc,i,j,k;
while(1)
{
cin>>fc;
if(fc==0)break;
cin>>rc;
for(i=0;i<fc;++i)cin>>f[i];
for(i=0,k=0;i<rc;++i)
{
cin>>r;
for(j=0;j<fc;++j)ra[k++]=r/f[j];
}
// for(i=0;i<k;++i)cout<<ra[i]<<" ";
// cout<<endl;
qsort(ra,k,sizeof(double),cmp);
// for(i=0;i<k;++i)cout<<ra[i]<<" ";
// cout<<endl;
m=0.0;
for(i=1;i<k;++i)
{
t=ra[i]/ra[i-1];
if(t>m)m=t;
}
cout.precision(3);
cout.width(4);
cout.setf(ios::left);
cout.setf(ios::showpoint);
cout.fill('0');
cout<<m<<endl;
}
return 0;
}
int cmp(const void *a,const void *b)
{
double x=*((double*)a);
double y=*((double*)b);
x=x-y;
if(fabs(x)<1e-6)return 0;
else if(x>0)return 1;
else return -1;
}