题目:http://www.patest.cn/contests/pat-b-practise/1020
代码:
#include <stdio.h>
int main()
{
int n,d,i,j,max_flag;
float a[3][1000]; //用于存储月饼种类数和各种类的库存量,最后一行用来存储标记1为未读取
float b[1000];//存各种类的每万吨价格
float k=0,m=0,q=0;//k为最大收益,m为最大库存,q为最大销售额
int location(float a[][1000],float b[],int);//返回最大单价位置
scanf("%d %d",&n,&d);
for (i=0;i<2;i++)
for (j=0;j<n;j++)
scanf("%f",&a[i][j]);
for (i=0;i<n;i++)
{
b[i] = a[1][i]/a[0][i];
a[2][i] = 1;
m += a[0][i];
q += a[1][i];
}
if (d>=m)
{
printf("%.2f",q);
}
else
{
for(i=0;i<n;i++)
{
max_flag = location(a,b,n);
if (d<=a[0][max_flag])
{
k += d*b[max_flag];
printf("%.2f",k);
break;
}
else
{
d =d-a[0][max_flag];
k += a[1][max_flag];
}
}
}
return 0;
}
int location(float a[3][1000],float b[1000],int n)
{
int k=0;
int j;
float max = 0;
for (j=0;j<n;j++)
{
if (b[j]>=max&&(int)a[2][j]==1)
{
max = b[j];
k = j;
}
}
a[2][k] = 0;
return k;
}
本题有两个测试点刚开始写的时候没考虑清楚:1.最大需求量可能大于库存量之和。2.库存量和总售价可能是小数