自己写的代码(23分,不知道哪里除了问题 )
问题在于题目上说的库存和总价都是正数,没有说是正整数,所以表示库存和总价的时候还是得用浮点数表示(正整数包括正整数和正小数!)
#include <stdio.h>
struct Moon
{
int k; //k表示库存
int s; //s表示总售价
float d; //表示这种月饼的单价
}moon;
int main(void)
{
float N; //N为种类数,D为市场需求
int D;
scanf("%f %d",&N,&D);
struct Moon moon[N];
int i,j;
struct Moon temp;
float p=0;
for(i=0;i<N;i++) //输入库存总售价,并计算出单价
{
scanf("%d",&moon[i].k );
}
for(i=0;i<N;i++)
{
scanf("%d",&moon[i].s);
}
for(i=0;i<N;i++)
{
moon[i].d=(float)moon[i].s/moon[i].k;
}
//将结构体按单价的高低依次排序
for(i=0;i<N;i++)
{
for(j=0;j<N-i;j++)
{
if(moon[j].d<moon[j+1].d)
{
temp=moon[j+1];
moon[j+1]=moon[j];
moon[j]=temp;
}
}
}
//计算总利润
for(i=0;i<N;i++)
{
if(D>=moon[i].k)
{
D-=moon[i].k;
p+=moon[i].s;
}
else
{
p+=(float)D/moon[i].k*moon[i].s;
D=0;
}
if(D==0)
{
break;
}
}
printf("%.2f\n",p);
return 0;
}
别人写的代码(利用循环找出最大单价,然后算利润)
#include <stdio.h>
int main(){
int n; //表示种类
float d, profit = 0, price[1000], stock[1000];
int i, max;
scanf("%d %f", &n, &d);//d表示市场需求
for(i = 0; i < n; i++) scanf("%f", stock+i);//库存
for(i = 0; i < n; i++) scanf("%f", price+i);//总售价
while(d > 0){
max = 0;
for(i = 0; i < n; i++){ //此循环求出最大单价
if(price[i] / stock[i] > price[max] / stock[max]){
max = i;
}
}
if(d > stock[max]){
profit += price[max];
d -= stock[max];
price[max] = 0; //※将库存更新为零 !!!
}
else{
profit += d * price[max] / stock[max];
d = 0;
}
}
printf("%.2f\n", profit);
return 0;
}
2022.6.26
注意:不知道为什么在gcc编译器qsort函数返回值时-号有点不行,以后就都用>好吧
#include <stdio.h>
#include <stdlib.h>
typedef struct Moon{
int ku;
float sale;
float price;
}moon;
int compare(const void *a,const void *b){
moon A=*(moon *)a;
moon B=*(moon *)b;
return B.price>A.price;
}
int main(void){
int n,d,i;
scanf("%d %d",&n,&d);
moon moon[n];
float sum=0;
for(i=0;i<n;i++){
scanf("%d",&moon[i].ku);
}
for(i=0;i<n;i++){
scanf("%f",&moon[i].sale);
moon[i].price=moon[i].sale/moon[i].ku;
}
qsort(moon,n,sizeof(moon[0]),compare);
for(i=0;i<n;i++){
if(d>moon[i].ku){
sum+=moon[i].sale;
d-=moon[i].ku;
}
else{
sum+=d*moon[i].price;
break;
}
}
printf("%.2f\n",sum);
return 0;
}
发现了一个问题:最后一个else那里,如果我不直接乘单价,而是用d/总的库存在乘总售价,这样有个测试点会过不去,可能是因为d是整数,然后出了另一个整数会出现误差,然后导致最后结果出错的情况!
好好学习,天天向上!
我要考研!