鱼C论坛

 找回密码
 立即注册

1020. 月饼

已有 336 次阅读2017-12-13 21:13 |个人分类:C语言编程练习

第一次做的时候,PAT官网没过,牛客过了。唉……
思路:用一个结构体保存产品的库存、总价以及均价,然后利用自己在1015中写的结构体交换的代码,依据均价实现对结构体的排序。然后再依次算出结果即可。
这里要注意的是各月饼的存量及价值都是double 正数,所以不要用正整数;另外,需要考虑库存量小于市场需求的这种情况。 最后还有一个测试点没有过,找不到啊……


#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main()
{
struct product{
double inventory;
double sell_price;
double per_price;
};


int kind, demand, i, j, sum;//sum, pre_sum用于计算是否达到市场需求
product *ps, *temp;
int flag_num; //正好达到市场需求时所在的位置
double total_price, pre_sum;

flag_num = total_price = sum = pre_sum = 0;

scanf("%d%d", &kind, &demand);
if ( kind < 1 && kind > 1000 && demand > 500 && demand < 0)
return 0;

ps = (struct product *)malloc( kind * sizeof(struct product));
if ( ps == NULL)
return 0;

for ( i = 0; i < kind ; i++)
scanf("%lf", & ps[i].inventory);
for ( i = 0; i < kind ; i++)
scanf("%lf", & ps[i].sell_price);


for ( i = 0; i < kind; i++)
{
sum += ps[i].inventory;
total_price += ps[i].sell_price;
}
if ( sum <= demand)  //需要考虑库存量小于市场需求的这种情况
{
printf("%.2f\n", total_price);
return 0;
}
sum = total_price = 0;

for ( i = 0; i < kind ; i++)
ps[i].per_price = ps[i].sell_price / ps[i].inventory;

temp = (struct product *)malloc(sizeof(struct product));

for( i = 0 ; i< kind -1; i++)  
for(j = 0; j< kind-i-1; j++) 
{
if ( ps[j].per_price < ps[j + 1].per_price)
{
memcpy( temp, (ps + j), sizeof(ps[0]));
memcpy((ps + j ), (ps + j + 1), sizeof(ps[0]));
memcpy((ps + j + 1) , temp, sizeof(ps[0]));
}
}
//------------------结构体已经按照均价由高到低排好了---------------------

for (i = 1; i < kind; i ++)
{
pre_sum = pre_sum + ps[i - 1].inventory;
sum = pre_sum + ps[i].inventory;

if ( pre_sum <= demand && sum > demand)
{
flag_num = i;
break;
}
}
for (i = 0; i < flag_num; i++)
total_price += ps[i].sell_price;

total_price += (demand - pre_sum) * ps[flag_num].per_price;

printf("%.2f\n", total_price);

free(temp);
free(ps);
return 0;
}



路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-4-2 01:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部