pku3300

来源:互联网 发布:绿盟数据库审计型号 编辑:程序博客网 时间:2024/05/22 12:28
 

题意不难,相当于给出一组分母和一组分子,都不会为0,用他们构造出的分数按从小到大排列,对于相邻的两个数,用后一个除以前一个(即大的除以小的)的得到的数中,输出最大的即可.题意看懂了做起来不难,关键是输出要求四舍五入,输出两位小数,末尾是0也要输出(我就是栽在这里了),Cprintf相对简单,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;

}

 

原创粉丝点击